All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Wei Wang <wei.w.wang@intel.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, xdeguillard@vmware.com, namit@vmware.com,
	akpm@linux-foundation.org, pagupta@redhat.com, riel@surriel.com,
	dave.hansen@intel.com, david@redhat.com, konrad.wilk@oracle.com,
	yang.zhang.wz@gmail.com, nitesh@redhat.com,
	lcapitulino@redhat.com, aarcange@redhat.com, pbonzini@redhat.com,
	alexander.h.duyck@linux.intel.com, dan.j.williams@intel.com
Subject: Re: [PATCH v2] mm/balloon_compaction: avoid duplicate page removal
Date: Thu, 18 Jul 2019 08:26:11 -0400	[thread overview]
Message-ID: <20190718082535-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1563442040-13510-1-git-send-email-wei.w.wang@intel.com>

On Thu, Jul 18, 2019 at 05:27:20PM +0800, Wei Wang wrote:
> Fixes: 418a3ab1e778 (mm/balloon_compaction: List interfaces)
> 
> A #GP is reported in the guest when requesting balloon inflation via
> virtio-balloon. The reason is that the virtio-balloon driver has
> removed the page from its internal page list (via balloon_page_pop),
> but balloon_page_enqueue_one also calls "list_del"  to do the removal.
> This is necessary when it's used from balloon_page_enqueue_list, but
> not from balloon_page_enqueue_one.
> 
> So remove the list_del balloon_page_enqueue_one, and update some
> comments as a reminder.
> 
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>


ok I posted v3 with typo fixes. 1/2 is this patch with comment changes. Pls take a look.

> ---
> ChangeLong:
> v1->v2: updated some comments
> 
>  mm/balloon_compaction.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/balloon_compaction.c b/mm/balloon_compaction.c
> index 83a7b61..8639bfc 100644
> --- a/mm/balloon_compaction.c
> +++ b/mm/balloon_compaction.c
> @@ -21,7 +21,6 @@ static void balloon_page_enqueue_one(struct balloon_dev_info *b_dev_info,
>  	 * memory corruption is possible and we should stop execution.
>  	 */
>  	BUG_ON(!trylock_page(page));
> -	list_del(&page->lru);
>  	balloon_page_insert(b_dev_info, page);
>  	unlock_page(page);
>  	__count_vm_event(BALLOON_INFLATE);
> @@ -33,7 +32,7 @@ static void balloon_page_enqueue_one(struct balloon_dev_info *b_dev_info,
>   * @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
> + * Driver must call it to properly enqueue balloon pages before definitively
>   * removing it from the guest system.
>   *
>   * Return: number of pages that were enqueued.
> @@ -47,6 +46,7 @@ size_t balloon_page_list_enqueue(struct balloon_dev_info *b_dev_info,
>  
>  	spin_lock_irqsave(&b_dev_info->pages_lock, flags);
>  	list_for_each_entry_safe(page, tmp, pages, lru) {
> +		list_del(&page->lru);
>  		balloon_page_enqueue_one(b_dev_info, page);
>  		n_pages++;
>  	}
> @@ -128,13 +128,19 @@ struct page *balloon_page_alloc(void)
>  EXPORT_SYMBOL_GPL(balloon_page_alloc);
>  
>  /*
> - * balloon_page_enqueue - allocates a new page and inserts it into the balloon
> - *			  page list.
> + * balloon_page_enqueue - inserts a new page into the balloon page list.
> + *
>   * @b_dev_info: balloon device descriptor where we will insert a new page to
>   * @page: new page to enqueue - allocated using balloon_page_alloc.
>   *
>   * Driver must call it to properly enqueue a new allocated balloon page
>   * before definitively removing it from the guest system.
> + *
> + * Drivers must not call balloon_page_enqueue on pages that have been
> + * pushed to a list with balloon_page_push before removing them with
> + * balloon_page_pop. To all pages on a list, use balloon_page_list_enqueue
> + * instead.
> + *
>   * This function returns the page address for the recently enqueued page or
>   * NULL in the case we fail to allocate a new page this turn.
>   */
> -- 
> 2.7.4

  parent reply	other threads:[~2019-07-18 12:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-18  9:27 [PATCH v2] mm/balloon_compaction: avoid duplicate page removal Wei Wang
2019-07-18 11:37 ` Michael S. Tsirkin
2019-07-18 12:26 ` Michael S. Tsirkin [this message]
2019-07-18 17:02   ` Nadav Amit
2019-07-18 20:36   ` Andrew Morton
2019-07-18 20:42     ` Michael S. Tsirkin
2019-07-18 20:46       ` Michael S. Tsirkin

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=20190718082535-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.h.duyck@linux.intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=lcapitulino@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=namit@vmware.com \
    --cc=nitesh@redhat.com \
    --cc=pagupta@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=riel@surriel.com \
    --cc=wei.w.wang@intel.com \
    --cc=xdeguillard@vmware.com \
    --cc=yang.zhang.wz@gmail.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.