Re: Recent change pmem related breaks Xen migration

2019-12-19 Thread Beata Michalska
Hi Anthony,

On Thu, 19 Dec 2019 at 15:42, Anthony PERARD  wrote:
>
> Hi,
>
> Commit bd108a44bc29 ("migration: ram: Switch to ram block writeback")
> breaks migration on Xen. We have:
>   ramblock_ptr: Assertion `offset_in_ramblock(block, offset)' failed.
>
> I've track it down to qemu_ram_writeback() calling ramblock_ptr()
> unconditionally, even when the result will not be used.
>
> Maybe we could call ramblock_ptr() twice in that function? I've prepared
> a patch.
>
>
> FYI, full-ish trace on restore of a xen guest:
> #3  0x7f82d0848526 in __assert_fail () from /usr/lib/libc.so.6
> #4  0x562dc4578122 in ramblock_ptr (block=0x562dc5ebe2a0, offset=0) at 
> /root/build/qemu/include/exec/ram_addr.h:120
> #5  0x562dc457d1b7 in qemu_ram_writeback (block=0x562dc5ebe2a0, start=0, 
> length=515899392) at /root/build/qemu/exec.c:2169
> #6  0x562dc45e8941 in qemu_ram_block_writeback (block=0x562dc5ebe2a0) at 
> /root/build/qemu/include/exec/ram_addr.h:182
> #7  0x562dc45f0b56 in ram_load_cleanup (opaque=0x562dc510fe00 
> ) at /root/build/qemu/migration/ram.c:3983
> #8  0x562dc49970b6 in qemu_loadvm_state_cleanup () at 
> migration/savevm.c:2415
> #9  0x562dc4997548 in qemu_loadvm_state (f=0x562dc6a1c600) at 
> migration/savevm.c:2597
> #10 0x562dc4987be7 in process_incoming_migration_co (opaque=0x0) at 
> migration/migration.c:454
> #11 0x562dc4b907e5 in coroutine_trampoline (i0=-962514432, i1=22061) at 
> util/coroutine-ucontext.c:115
>
> And *block in ramblock_ptr():
> (gdb) p *block
> $2 = {
>   rcu = {
> next = 0x0,
> func = 0x0
>   },
>   mr = 0x562dc512e140 ,
>   host = 0x0,
>   colo_cache = 0x0,
>   offset = 0,
>   used_length = 515899392,
>   max_length = 515899392,
>   resized = 0x0,
>   flags = 16,
>   idstr = "xen.ram", '\000' ,
>   next = {
> le_next = 0x562dc67bf7e0,
> le_prev = 0x562dc510f1a0 
>   },
>   ramblock_notifiers = {
> lh_first = 0x0
>   },
>   fd = -1,
>   page_size = 4096,
>   bmap = 0x0,
>   receivedmap = 0x562dc6a24a60,
>   clear_bmap = 0x0,
>   clear_bmap_shift = 0 '\000'
> }
>
> Cheers,
>
> --
> Anthony PERARD

I have already replied to your patch submission.
Looks good and thanks for fixing .

BR
Beata



Recent change pmem related breaks Xen migration

2019-12-19 Thread Anthony PERARD
Hi,

Commit bd108a44bc29 ("migration: ram: Switch to ram block writeback")
breaks migration on Xen. We have:
  ramblock_ptr: Assertion `offset_in_ramblock(block, offset)' failed.

I've track it down to qemu_ram_writeback() calling ramblock_ptr()
unconditionally, even when the result will not be used.

Maybe we could call ramblock_ptr() twice in that function? I've prepared
a patch.


FYI, full-ish trace on restore of a xen guest:
#3  0x7f82d0848526 in __assert_fail () from /usr/lib/libc.so.6
#4  0x562dc4578122 in ramblock_ptr (block=0x562dc5ebe2a0, offset=0) at 
/root/build/qemu/include/exec/ram_addr.h:120
#5  0x562dc457d1b7 in qemu_ram_writeback (block=0x562dc5ebe2a0, start=0, 
length=515899392) at /root/build/qemu/exec.c:2169
#6  0x562dc45e8941 in qemu_ram_block_writeback (block=0x562dc5ebe2a0) at 
/root/build/qemu/include/exec/ram_addr.h:182
#7  0x562dc45f0b56 in ram_load_cleanup (opaque=0x562dc510fe00 ) 
at /root/build/qemu/migration/ram.c:3983
#8  0x562dc49970b6 in qemu_loadvm_state_cleanup () at 
migration/savevm.c:2415
#9  0x562dc4997548 in qemu_loadvm_state (f=0x562dc6a1c600) at 
migration/savevm.c:2597
#10 0x562dc4987be7 in process_incoming_migration_co (opaque=0x0) at 
migration/migration.c:454
#11 0x562dc4b907e5 in coroutine_trampoline (i0=-962514432, i1=22061) at 
util/coroutine-ucontext.c:115

And *block in ramblock_ptr():
(gdb) p *block
$2 = {
  rcu = {
next = 0x0, 
func = 0x0
  }, 
  mr = 0x562dc512e140 , 
  host = 0x0, 
  colo_cache = 0x0, 
  offset = 0, 
  used_length = 515899392, 
  max_length = 515899392, 
  resized = 0x0, 
  flags = 16, 
  idstr = "xen.ram", '\000' , 
  next = {
le_next = 0x562dc67bf7e0, 
le_prev = 0x562dc510f1a0 
  }, 
  ramblock_notifiers = {
lh_first = 0x0
  }, 
  fd = -1, 
  page_size = 4096, 
  bmap = 0x0, 
  receivedmap = 0x562dc6a24a60, 
  clear_bmap = 0x0, 
  clear_bmap_shift = 0 '\000'
}

Cheers,

-- 
Anthony PERARD