Received: by 2002:ac0:8c8e:0:0:0:0:0 with SMTP id r14csp73187ima; Wed, 6 Feb 2019 17:27:41 -0800 (PST) X-Google-Smtp-Source: AHgI3IaMm3L8HJTwL0GWnH/LvHVEG0xi0yTYJdKL0jkZBZ7bmfmUi4XgmEPNJH7PSDN0boQ9ARMN X-Received: by 2002:a62:520b:: with SMTP id g11mr13749393pfb.53.1549502861890; Wed, 06 Feb 2019 17:27:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549502861; cv=none; d=google.com; s=arc-20160816; b=u7pC64ohCph/F0DfSqz3dIcDfQbwuwZ3scVlG23PpwjNLXQpoc7FCweHb6Zt/glm7o 4FqEgTs637pLDNNGfww6SmWPW587pYHlohaelgCK3E5w6styz08IfAACTOnqcxNnP05u xcQxU2LqoOCcz4uItkmspfp1OV/TdgIqPCh1UO/rCr/+byGahug/rY1fX3R1W7x23rYO XZC1A6n0GGIwQSMKPOh9Mv6mCSVH9CWCDvyxqI2Vi0skLZZSjd/ZAq0STd6+dRNfTHSU Pmfn3thStHbfQ9HN0JE/rX5QJPgwivcInaouLudnxFuoZ36W7zb47Ld7moLJKJd+ur59 nilw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=GV7jRzryx4h4elQUlhKrt3qkVD48To0IwEujXST8aHo=; b=hsyPcNmAZUm3atXbtFLvt6OuGAuPBA+VfG5XpAEi6ZQVpfNmkAK0IgNYuf2/Xfd8U7 82+wyi3KgP9qropbBbUesnjH6i/9qk1sMDtGH4fP8pBYMlTnzEPRhe4JFJmnXwI5BPGY JOQ3MsayHolvjz3cur2ebDBFjm4aElZ1uJjrAczIiCB/VOb9aPeChKc/xtWKvfDFpDRJ CD3Oa7ZujxeUrnyKegFtFOMBhkj/YJqFdJPsDyUea8G8/WGep5Nffso62YRAzV3dJcdU gpEqsEIm44W/aQCdrdpQqkeiGOSHRK7G9GZ6D0jvc7jDEV3w9GW6cZU10TtdtvQfgBJY IDSw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w10si7205321pgj.214.2019.02.06.17.27.25; Wed, 06 Feb 2019 17:27:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726606AbfBGB0p (ORCPT + 99 others); Wed, 6 Feb 2019 20:26:45 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38642 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726161AbfBGB0p (ORCPT ); Wed, 6 Feb 2019 20:26:45 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9C663C002970; Thu, 7 Feb 2019 01:26:44 +0000 (UTC) Received: from redhat.com (ovpn-120-253.rdu2.redhat.com [10.10.120.253]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4008E6A526; Thu, 7 Feb 2019 01:26:43 +0000 (UTC) Date: Wed, 6 Feb 2019 20:26:42 -0500 From: "Michael S. Tsirkin" To: Nadav Amit Cc: Greg Kroah-Hartman , Arnd Bergmann , "linux-kernel@vger.kernel.org" , Julien Freche , Jason Wang , "linux-mm@kvack.org" , "virtualization@lists.linux-foundation.org" Subject: Re: [PATCH 3/6] mm/balloon_compaction: list interfaces Message-ID: <20190206202628-mutt-send-email-mst@kernel.org> References: <20190206235706.4851-1-namit@vmware.com> <20190206235706.4851-4-namit@vmware.com> <20190206191936-mutt-send-email-mst@kernel.org> <0DFA5F3F-8358-4268-83C7-9937C5F0CFFF@vmware.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <0DFA5F3F-8358-4268-83C7-9937C5F0CFFF@vmware.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 07 Feb 2019 01:26:44 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 07, 2019 at 12:43:51AM +0000, Nadav Amit wrote: > > On Feb 6, 2019, at 4:32 PM, Michael S. Tsirkin wrote: > > > > On Wed, Feb 06, 2019 at 03:57:03PM -0800, Nadav Amit wrote: > >> Introduce interfaces for ballooning enqueueing and dequeueing of a list > >> of pages. These interfaces reduce the overhead of storing and restoring > >> IRQs by batching the operations. In addition they do not panic if the > >> list of pages is empty. > >> > > [Snip] > > First, thanks for the quick feedback. > > >> + > >> +/** > >> + * balloon_page_list_enqueue() - inserts a list of pages into the balloon page > >> + * list. > >> + * @b_dev_info: balloon device descriptor where we will insert a new page to > >> + * @pages: pages to enqueue - allocated using balloon_page_alloc. > >> + * > >> + * Driver must call it to properly enqueue a balloon pages before definitively > >> + * removing it from the guest system. > >> + */ > >> +void balloon_page_list_enqueue(struct balloon_dev_info *b_dev_info, > >> + struct list_head *pages) > >> +{ > >> + struct page *page, *tmp; > >> + unsigned long flags; > >> + > >> + spin_lock_irqsave(&b_dev_info->pages_lock, flags); > >> + list_for_each_entry_safe(page, tmp, pages, lru) > >> + balloon_page_enqueue_one(b_dev_info, page); > >> + spin_unlock_irqrestore(&b_dev_info->pages_lock, flags); > > > > As this is scanning pages one by one anyway, it will be useful > > to have this return the # of pages enqueued. > > Sure. > > > > >> +} > >> +EXPORT_SYMBOL_GPL(balloon_page_list_enqueue); > >> + > >> +/** > >> + * balloon_page_list_dequeue() - removes pages from balloon's page list and > >> + * returns a list of the pages. > >> + * @b_dev_info: balloon device decriptor where we will grab a page from. > >> + * @pages: pointer to the list of pages that would be returned to the caller. > >> + * @n_req_pages: number of requested pages. > >> + * > >> + * Driver must call it to properly de-allocate a previous enlisted balloon pages > >> + * before definetively releasing it back to the guest system. This function > >> + * tries to remove @n_req_pages from the ballooned pages and return it to the > >> + * caller in the @pages list. > >> + * > >> + * Note that this function may fail to dequeue some pages temporarily empty due > >> + * to compaction isolated pages. > >> + * > >> + * Return: number of pages that were added to the @pages list. > >> + */ > >> +int balloon_page_list_dequeue(struct balloon_dev_info *b_dev_info, > >> + struct list_head *pages, int n_req_pages) > > > > Are we sure this int never overflows? Why not just use u64 > > or size_t straight away? > > size_t it is. > > > > >> +{ > >> + struct page *page, *tmp; > >> + unsigned long flags; > >> + int n_pages = 0; > >> + > >> + spin_lock_irqsave(&b_dev_info->pages_lock, flags); > >> + list_for_each_entry_safe(page, tmp, &b_dev_info->pages, lru) { > >> + /* > >> + * Block others from accessing the 'page' while we get around > >> + * establishing additional references and preparing the 'page' > >> + * to be released by the balloon driver. > >> + */ > >> + if (!trylock_page(page)) > >> + continue; > >> + > >> + if (IS_ENABLED(CONFIG_BALLOON_COMPACTION) && > >> + PageIsolated(page)) { > >> + /* raced with isolation */ > >> + unlock_page(page); > >> + continue; > >> + } > >> + balloon_page_delete(page); > >> + __count_vm_event(BALLOON_DEFLATE); > >> + unlock_page(page); > >> + list_add(&page->lru, pages); > >> + if (++n_pages >= n_req_pages) > >> + break; > >> + } > >> + spin_unlock_irqrestore(&b_dev_info->pages_lock, flags); > >> + > >> + return n_pages; > >> +} > >> +EXPORT_SYMBOL_GPL(balloon_page_list_dequeue); > >> + > > > > This looks quite reasonable. In fact virtio can be reworked to use > > this too and then the original one can be dropped. > > > > Have the time? > > Obviously not, but I am willing to make the time. What I cannot “make" is an > approval to send patches for other hypervisors. Let me run a quick check > with our FOSS people here. > > Anyhow, I hope it would not prevent the patches from getting to the next > release. > No, that's not a blocker. -- MST