From: Juan Quintela <quintela@redhat.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: liang.z.li@intel.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 4/6] save_xbzrle_page: change calling convention
Date: Thu, 12 Mar 2015 16:48:43 +0100 [thread overview]
Message-ID: <87mw3ip678.fsf@neno.neno> (raw)
In-Reply-To: <20150224103731.GD26558@grmbl.mre> (Amit Shah's message of "Tue, 24 Feb 2015 16:07:31 +0530")
Amit Shah <amit.shah@redhat.com> wrote:
> On (Thu) 12 Feb 2015 [23:03:09], Juan Quintela wrote:
>> Add a parameter to pass the number of bytes written, and make it return
>> the number of pages written instead.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>> arch_init.c | 44 +++++++++++++++++++++++++-------------------
>> 1 file changed, 25 insertions(+), 19 deletions(-)
>>
>> diff --git a/arch_init.c b/arch_init.c
>> index f243c6e..834f40c 100644
>> --- a/arch_init.c
>> +++ b/arch_init.c
>> @@ -352,11 +352,27 @@ static void xbzrle_cache_zero_page(ram_addr_t current_addr)
>>
>> #define ENCODING_FLAG_XBZRLE 0x1
>>
>> +/**
>> + * save_xbzrle_page: compress and send current page
>> + *
>> + * Returns: 1 means that we wrote the page
>> + * 0 means that page is identical to the one already sent
>> + * -1 means that xbzrle would be longer than normal
>> + *
>> + * @f: QEMUFile where to send the data
>> + * @current_data:
>> + * @current_addr:
>> + * @block: block that contains the page we want to send
>> + * @offset: offset inside the block for the page
>> + * @last_stage: if we are at the completion stage
>> + * @bytes_transferred: increase it with the number of transferred bytes
>> + */
>> static int save_xbzrle_page(QEMUFile *f, uint8_t **current_data,
>> ram_addr_t current_addr, RAMBlock *block,
>> - ram_addr_t offset, int cont, bool last_stage)
>> + ram_addr_t offset, int cont, bool last_stage,
>> + uint64_t *bytes_transferred)
>> {
>> - int encoded_len = 0, bytes_sent = -1;
>> + int encoded_len = 0, bytes_xbzrle;
>> uint8_t *prev_cached_page;
>>
>> if (!cache_is_cached(XBZRLE.cache, current_addr, bitmap_sync_count)) {
>
> This patch exposes a bug in here:
>
> if (!cache_is_cached(XBZRLE.cache, current_addr, bitmap_sync_count)) {
> acct_info.xbzrle_cache_miss++;
> if (!last_stage) {
> if (cache_insert(XBZRLE.cache, current_addr, *current_data,
> bitmap_sync_count) == -1) {
> return -1;
> } else {
> /* update *current_data when the page has been
> inserted into cache */
> *current_data = get_cached_data(XBZRLE.cache, current_addr);
> }
> }
> return -1;
> }
>
> The return -1 should not be done for a successful insert of page in
> cache.
Why?
Return -1 means:
>> + * -1 means that xbzrle would be longer than normal
in the case that page was not on the cache, we just sent the page as
normal page, that is what we want.
>
> Also, return -1 for both cache overflow and cache miss are perhaps not
> relevant for the caller but the doctext needs to be updated.
-1 means: send the full page, please.
I am not sure that caller want to know if it is because the cache was
full or because the page was not in cache, or because the page was not
"comprhensible".
Later, Juan.
next prev parent reply other threads:[~2015-03-12 16:18 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-12 22:03 [Qemu-devel] [PATCH 0/6] migration: differentiate between pages and bytes Juan Quintela
2015-02-12 22:03 ` [Qemu-devel] [PATCH 1/6] ram: make all save_page functions take a uint64_t parameter Juan Quintela
2015-02-24 9:53 ` Amit Shah
2015-02-12 22:03 ` [Qemu-devel] [PATCH 2/6] ram_find_and_save_block: change calling convention Juan Quintela
2015-02-24 10:05 ` Amit Shah
2015-02-12 22:03 ` [Qemu-devel] [PATCH 3/6] ram_save_page: change calling covention Juan Quintela
2015-02-12 22:03 ` [Qemu-devel] [PATCH 4/6] save_xbzrle_page: change calling convention Juan Quintela
2015-02-24 10:37 ` Amit Shah
2015-03-12 15:48 ` Juan Quintela [this message]
2015-02-12 22:03 ` [Qemu-devel] [PATCH 5/6] save_block_hdr: we can recalculate the cont parameter here Juan Quintela
2015-02-26 4:49 ` Li, Liang Z
2015-03-12 15:36 ` Juan Quintela
2015-02-12 22:03 ` [Qemu-devel] [PATCH 6/6] rename save_block_hdr to save_page_header Juan Quintela
2015-02-24 12:48 ` Amit Shah
2015-02-26 4:53 ` Li, Liang Z
2015-03-12 15:44 ` Juan Quintela
2015-02-13 2:28 ` [Qemu-devel] [PATCH 0/6] migration: differentiate between pages and bytes Li, Liang Z
2015-02-17 14:23 ` Dr. David Alan Gilbert
2015-02-26 5:15 ` Li, Liang Z
2015-02-26 9:59 ` Dr. David Alan Gilbert
2015-02-26 7:05 ` Alex Bennée
2015-03-12 15:33 ` Juan Quintela
2015-03-09 2:02 ` Li, Liang Z
2015-03-12 15:33 ` Juan Quintela
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=87mw3ip678.fsf@neno.neno \
--to=quintela@redhat.com \
--cc=amit.shah@redhat.com \
--cc=liang.z.li@intel.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).