From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: Re: [PATCHv6 3/3] xen/privcmd: improve performance of MMAPBATCH_V2 Date: Mon, 9 Mar 2015 15:25:01 +0000 Message-ID: <54FDBB4D.1000606@citrix.com> References: <1425646715-20834-1-git-send-email-david.vrabel@citrix.com> <1425646715-20834-4-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1YUzYJ-0008Ps-LC for xen-devel@lists.xenproject.org; Mon, 09 Mar 2015 15:25:07 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Stefano Stabellini , David Vrabel Cc: xen-devel@lists.xenproject.org, Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org On 09/03/15 12:25, Stefano Stabellini wrote: > On Fri, 6 Mar 2015, David Vrabel wrote: >> >> +/* >> + * Similar to traverse_pages, but use each page as a "block" of >> + * data to be processed as one unit. >> + */ >> +static int traverse_pages_block(unsigned nelem, size_t size, >> + struct list_head *pos, >> + int (*fn)(void *data, int nr, void *state), >> + void *state) >> +{ >> + void *pagedata; >> + unsigned pageidx; >> + int ret = 0; >> + >> + BUG_ON(size > PAGE_SIZE); > > I looks like that PAGE_SIZE needs to be a multiple of size. Maybe we can > add a BUG_ON for that too. There is no such requirement because... >> + pageidx = PAGE_SIZE; >> + >> + while (nelem) { >> + int nr = (PAGE_SIZE/size); ...the number of elements per pages is rounded down here. >> + struct page *page; >> + if (nr > nelem) >> + nr = nelem; >> + pos = pos->next; >> + page = list_entry(pos, struct page, lru); >> + pagedata = page_address(page); >> + ret = (*fn)(pagedata, nr, state); >> + if (ret) >> + break; >> + nelem -= nr; >> + } >> + >> + return ret; >> +} David