> Rest of the code looks fine.
Except for a couple of bugs that took awhile to track down :-(
First (stupid one), get_page returns 1 for success and 0 for failure
and I was testing for failure by <= 0 (the Linux convention, oops).
Second, and much more subtle, apparently get_page_and_type
must always be bracketed with a put_page_and_type, and get_page
must always be bracketed with a put_page, i.e. these can't
be mixed. It appears that the "and_type" versions take
two references, not one so mixing them results in bad
non-obvious BUGs when pages are cycled through the heap.
> -----Original Message-----
> From: Keir Fraser [mailto:keir.fraser@xxxxxxxxxxxxx]
> Sent: Tuesday, September 21, 2010 1:44 AM
> To: Dan Magenheimer; Jan Beulich
> Cc: Xen-devel
> Subject: Re: [Xen-devel] Re: xen crash in tmem: checking a xen pfn for
> domain ownership
>
> On 21/09/2010 00:03, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx>
> wrote:
>
> > if ( is_hvm_domain(current->domain) )
> > {
> > xmfn = mfn_x(gfn_to_mfn_unshare(current->domain, cmfn, &t,
> 2));
> > if (t != p2m_ram_rw || xmfn == INVALID_MFN)
> > return NULL;
> > }
> > else
> > {
> > xmfn = cmfn;
> > if (!mfn_valid(xmfn))
> > return NULL;
> > }
>
> This is needlessly cumbersome. You can do it without the if(is_hvm):
>
> xmfn = mfn_x(gfn_to_mfn(current->domain, cmfn, &t);
> if ((t != p2m_ram_rw) || !mfn_valid(xmfn))
> return NULL;
>
> (Didn't use hfn_to_mfn_unshare as you have decided against it.)
>
> Rest of the code looks fine.
>
> -- Keir
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|