From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH] x86: fix preemptable page typehandling(v2) Date: Thu, 30 Oct 2008 17:03:47 +0000 Message-ID: <4909F703.76E4.0078.0@novell.com> References: <4909D910.76E4.0078.0@novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org >>> Keir Fraser 30.10.08 16:00 >>> >On 30/10/08 14:56, "Jan Beulich" wrote: > >>> get_page() across all __put_page() operations and then skipping the >>> put_page() in some cases, for example, seems inefficient and also = makes the >>> code less clear. Why would you do it that way? >>=20 >> Because I can't handle a failure of get_page() (due to count overflow) >> once I'm past the put()s. > >We could make get_page() always leave a few available references, and = then >define a new get_page() variant which: > A. Does not check the owner > B. Knows that it is incrementing a non-zero count > C. Is able to use the few references never claimed by get_page(). > >This would be basically a small cmpxchg() loop. Since it's only executed >before setting PGT_partial we know that only one such special reference = is >needed per page and we could just make get_page() leave headroom of one >reference. > >Simpler code and faster code? Yes - admittedly I had expected you to dislike a special casing approach = like this... Jan