From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46347) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5W8l-0000hy-I9 for qemu-devel@nongnu.org; Thu, 18 Jun 2015 05:29:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5W8i-0002kB-98 for qemu-devel@nongnu.org; Thu, 18 Jun 2015 05:29:43 -0400 Received: from mx-v6.kamp.de ([2a02:248:0:51::16]:35856 helo=mx01.kamp.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5W8h-0002jX-R6 for qemu-devel@nongnu.org; Thu, 18 Jun 2015 05:29:40 -0400 Message-ID: <55828F73.3080809@kamp.de> Date: Thu, 18 Jun 2015 11:29:23 +0200 From: Peter Lieven MIME-Version: 1.0 References: <55803637.3060607@kamp.de> <20150617083539.GA4202@noname.str.redhat.com> <55826789.6080008@kamp.de> <55826C49.2030605@redhat.com> <55826D4B.3000703@kamp.de> <55826F41.70808@kamp.de> <20150618074500.GB4270@noname.redhat.com> <558281B2.6020905@kamp.de> <20150618084241.GC4270@noname.redhat.com> In-Reply-To: <20150618084241.GC4270@noname.redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [Qemu-block] RFC cdrom in own thread? List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: Paolo Bonzini , jsnow@redhat.com, qemu-devel , qemu block , Stefan Hajnoczi Am 18.06.2015 um 10:42 schrieb Kevin Wolf: > Am 18.06.2015 um 10:30 hat Peter Lieven geschrieben: >> Am 18.06.2015 um 09:45 schrieb Kevin Wolf: >>> Am 18.06.2015 um 09:12 hat Peter Lieven geschrieben: >>>> Thread 2 (Thread 0x7ffff5550700 (LWP 2636)): >>>> #0 0x00007ffff5d87aa3 in ppoll () from /lib/x86_64-linux-gnu/libc.so.6 >>>> No symbol table info available. >>>> #1 0x0000555555955d91 in qemu_poll_ns (fds=0x5555563889c0, nfds=3, >>>> timeout=4999424576) at qemu-timer.c:326 >>>> ts = {tv_sec = 4, tv_nsec = 999424576} >>>> tvsec = 4 >>>> #2 0x0000555555956feb in aio_poll (ctx=0x5555563528e0, blocking=true) >>>> at aio-posix.c:231 >>>> node = 0x0 >>>> was_dispatching = false >>>> ret = 1 >>>> progress = false >>>> #3 0x000055555594aeed in bdrv_prwv_co (bs=0x55555637eae0, offset=4292007936, >>>> qiov=0x7ffff554f760, is_write=false, flags=0) at block.c:2699 >>>> aio_context = 0x5555563528e0 >>>> co = 0x5555563888a0 >>>> rwco = {bs = 0x55555637eae0, offset = 4292007936, >>>> qiov = 0x7ffff554f760, is_write = false, ret = 2147483647, flags = 0} >>>> #4 0x000055555594afa9 in bdrv_rw_co (bs=0x55555637eae0, sector_num=8382828, >>>> buf=0x7ffff44cc800 "(", nb_sectors=4, is_write=false, flags=0) >>>> at block.c:2722 >>>> qiov = {iov = 0x7ffff554f780, niov = 1, nalloc = -1, size = 2048} >>>> iov = {iov_base = 0x7ffff44cc800, iov_len = 2048} >>>> #5 0x000055555594b008 in bdrv_read (bs=0x55555637eae0, sector_num=8382828, >>>> buf=0x7ffff44cc800 "(", nb_sectors=4) at block.c:2730 >>>> No locals. >>>> #6 0x000055555599acef in blk_read (blk=0x555556376820, sector_num=8382828, >>>> buf=0x7ffff44cc800 "(", nb_sectors=4) at block/block-backend.c:404 >>>> No locals. >>>> #7 0x0000555555833ed2 in cd_read_sector (s=0x555556408f88, lba=2095707, >>>> buf=0x7ffff44cc800 "(", sector_size=2048) at hw/ide/atapi.c:116 >>>> ret = 32767 >>> Here is the problem: The ATAPI emulation uses synchronous blk_read() >>> instead of the AIO or coroutine interfaces. This means that it keeps >>> polling for request completion while it holds the BQL until the request >>> is completed. >> I will look at this. I need some further help. My way to "emulate" a hung NFS Server is to block it in the Firewall. Currently I face the problem that I cannot mount a CD Iso via libnfs (nfs://) without hanging Qemu (i previously tried with a kernel NFS mount). It reads a few sectors and then stalls (maybe another bug): (gdb) thread apply all bt full Thread 3 (Thread 0x7ffff0c21700 (LWP 29710)): #0 qemu_cond_broadcast (cond=cond@entry=0x555556259940) at util/qemu-thread-posix.c:120 err = __func__ = "qemu_cond_broadcast" #1 0x0000555555911164 in rfifolock_unlock (r=r@entry=0x555556259910) at util/rfifolock.c:75 __PRETTY_FUNCTION__ = "rfifolock_unlock" #2 0x0000555555875921 in aio_context_release (ctx=ctx@entry=0x5555562598b0) at async.c:329 No locals. #3 0x000055555588434c in aio_poll (ctx=ctx@entry=0x5555562598b0, blocking=blocking@entry=true) at aio-posix.c:272 node = was_dispatching = false i = ret = progress = false timeout = 611734526 __PRETTY_FUNCTION__ = "aio_poll" #4 0x00005555558bc43d in bdrv_prwv_co (bs=bs@entry=0x55555627c0f0, offset=offset@entry=7038976, qiov=qiov@entry=0x7ffff0c208f0, is_write=is_write@entry=false, flags=flags@entry=(unknown: 0)) at block/io.c:552 aio_context = 0x5555562598b0 co = rwco = {bs = 0x55555627c0f0, offset = 7038976, qiov = 0x7ffff0c208f0, is_write = false, ret = 2147483647, flags = (unknown: 0)} #5 0x00005555558bc533 in bdrv_rw_co (bs=0x55555627c0f0, sector_num=sector_num@entry=13748, buf=buf@entry=0x555557874800 "(", nb_sectors=nb_sectors@entry=4, is_write=is_write@entry=false, flags=flags@entry=(unknown: 0)) at block/io.c:575 qiov = {iov = 0x7ffff0c208e0, niov = 1, nalloc = -1, size = 2048} iov = {iov_base = 0x555557874800, iov_len = 2048} #6 0x00005555558bc593 in bdrv_read (bs=, sector_num=sector_num@entry=13748, buf=buf@entry=0x555557874800 "(", nb_sectors=nb_sectors@entry=4) at block/io.c:583 No locals. #7 0x00005555558af75d in blk_read (blk=, sector_num=sector_num@entry=13748, buf=buf@entry=0x555557874800 "(", nb_sectors=nb_sectors@entry=4) at block/block-backend.c:493 ret = #8 0x00005555557abb88 in cd_read_sector (sector_size=, buf=0x555557874800 "(", lba=3437, s=0x55555760db70) at hw/ide/atapi.c:116 ret = #9 ide_atapi_cmd_reply_end (s=0x55555760db70) at hw/ide/atapi.c:190 byte_count_limit = size = ret = 2 #10 0x00005555556398a6 in memory_region_write_accessor (mr=0x5555577f85d0, addr=, value=0x7ffff0c20a68, size=2, shift=, mask=, attrs=...) at /home/lieven/git/qemu/memory.c:459 tmp = #11 0x000055555563956b in access_with_adjusted_size (addr=addr@entry=0, value=value@entry=0x7ffff0c20a68, size=size@entry=2, access_size_min=, access_size_max=, access=access@entry=0x555555639840 , mr=mr@entry=0x5555577f85d0, attrs=attrs@entry=...) at /home/lieven/git/qemu/memory.c:518 access_mask = 65535 access_size = 2 i = r = 0 #12 0x000055555563b3a9 in memory_region_dispatch_write (mr=mr@entry=0x5555577f85d0, addr=0, data=0, size=2, attrs=...) at /home/lieven/git/qemu/memory.c:1174 No locals. #13 0x00005555555fcc00 in address_space_rw (as=0x555555d7c7c0 , addr=addr@entry=368, attrs=..., attrs@entry=..., buf=buf@entry=0x7ffff7ff1000 "", len=len@entry=2, is_write=is_write@entry=true) at /home/lieven/git/qemu/exec.c:2357 l = 2 ptr = val = 0 addr1 = 0 mr = 0x5555577f85d0 result = 0 #14 0x0000555555638610 in kvm_handle_io (count=1, size=2, direction=, data=, attrs=..., port=368) at /home/lieven/git/qemu/kvm-all.c:1636 i = 0 ptr = 0x7ffff7ff1000 "" #15 kvm_cpu_exec (cpu=cpu@entry=0x555556295c30) at /home/lieven/git/qemu/kvm-all.c:1804 attrs = {unspecified = 0, secure = 0, user = 0, stream_id = 0} run = 0x7ffff7ff0000 ---Type to continue, or q to quit--- ret = run_ret = #16 0x00005555556232f2 in qemu_kvm_cpu_thread_fn (arg=0x555556295c30) at /home/lieven/git/qemu/cpus.c:976 cpu = 0x555556295c30 r = #17 0x00007ffff5a49182 in start_thread (arg=0x7ffff0c21700) at pthread_create.c:312 __res = pd = 0x7ffff0c21700 now = unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140737232639744, 6130646130327736738, 1, 0, 140737232640448, 140737232639744, -6130648513365749342, -6130659796022144606}, mask_was_saved = 0}}, priv = {pad = { 0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = pagesize_m1 = sp = freesize = __PRETTY_FUNCTION__ = "start_thread" #18 0x00007ffff577647d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 No locals. Thread 2 (Thread 0x7ffff1911700 (LWP 29709)): #0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38 No locals. #1 0x00005555559006a2 in futex_wait (val=4294967295, ev=0x55555620a124 ) at util/qemu-thread-posix.c:301 No locals. #2 qemu_event_wait (ev=ev@entry=0x55555620a124 ) at util/qemu-thread-posix.c:399 value = #3 0x00005555559114e6 in call_rcu_thread (opaque=) at util/rcu.c:233 tries = 0 n = node = #4 0x00007ffff5a49182 in start_thread (arg=0x7ffff1911700) at pthread_create.c:312 __res = pd = 0x7ffff1911700 now = unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140737246205696, 6130646130327736738, 1, 0, 140737246206400, 140737246205696, -6130651373813968478, -6130659796022144606}, mask_was_saved = 0}}, priv = {pad = { 0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = pagesize_m1 = sp = freesize = __PRETTY_FUNCTION__ = "start_thread" #5 0x00007ffff577647d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 No locals. Thread 1 (Thread 0x7ffff7fc8a80 (LWP 29705)): #0 __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135 No locals. #1 0x00007ffff5a4b657 in _L_lock_909 () from /lib/x86_64-linux-gnu/libpthread.so.0 No symbol table info available. #2 0x00007ffff5a4b480 in __GI___pthread_mutex_lock (mutex=0x555555dd5880 ) at ../nptl/pthread_mutex_lock.c:79 __PRETTY_FUNCTION__ = "__pthread_mutex_lock" type = 4294966784 #3 0x0000555555900039 in qemu_mutex_lock (mutex=mutex@entry=0x555555dd5880 ) at util/qemu-thread-posix.c:73 err = __func__ = "qemu_mutex_lock" #4 0x0000555555624cbc in qemu_mutex_lock_iothread () at /home/lieven/git/qemu/cpus.c:1152 No locals. #5 0x00005555558823fb in os_host_main_loop_wait (timeout=11000972) at main-loop.c:241 ret = 1 spin_counter = 0 ---Type to continue, or q to quit--- #6 main_loop_wait (nonblocking=) at main-loop.c:493 ret = 1 timeout = 1000 #7 0x00005555555f19ee in main_loop () at vl.c:1808 nonblocking = last_io = 1 #8 main (argc=, argv=, envp=) at vl.c:4470 i = snapshot = linux_boot = initrd_filename = kernel_filename = kernel_cmdline = boot_order = boot_once = 0x0 ds = cyls = heads = secs = translation = hda_opts = opts = icount_opts = olist = optind = 12 optarg = 0x0 loadvm = machine_class = 0x55555623d910 cpu_model = vga_model = 0x55555592b65b "std" qtest_chrdev = qtest_log = pid_file = incoming = defconfig = userconfig = 48 log_mask = log_file = mem_trace = {malloc = 0x55555570b380 , realloc = 0x55555570b340 , free = 0x55555570b300 , calloc = 0x0, try_malloc = 0x0, try_realloc = 0x0} trace_events = trace_file = maxram_size = ram_slots = vmstate_dump_file = main_loop_err = 0x0 __func__ = "main" Any ideas? Peter