From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LElel-0000Fw-9e for qemu-devel@nongnu.org; Mon, 22 Dec 2008 09:21:15 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LElek-0000Fc-Mn for qemu-devel@nongnu.org; Mon, 22 Dec 2008 09:21:14 -0500 Received: from [199.232.76.173] (port=36055 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LElek-0000FU-GV for qemu-devel@nongnu.org; Mon, 22 Dec 2008 09:21:14 -0500 Received: from sj-iport-6.cisco.com ([171.71.176.117]:30574) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.60) (envelope-from ) id 1LElek-0001d3-43 for qemu-devel@nongnu.org; Mon, 22 Dec 2008 09:21:14 -0500 Message-ID: <494FA255.9010702@cisco.com> Date: Mon, 22 Dec 2008 07:21:09 -0700 From: "David S. Ahern" MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] qemu spinning on serial port writes Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kvm-devel I am trying to redirect a guest's boot output through the host's serial port. Shortly after launching qemu, the main thread is spinning on: write(9, "0", 1) = -1 EAGAIN (Resource temporarily unavailable) fd 9 is the serial port, ttyS0. The backtrace for the thread is: #0 0x00002ac3433f8c0b in write () from /lib64/libpthread.so.0 #1 0x0000000000475df9 in send_all (fd=9, buf=, len1=1) at qemu-char.c:477 #2 0x000000000043a102 in serial_xmit (opaque=) at /root/kvm-81/qemu/hw/serial.c:311 #3 0x000000000043a591 in serial_ioport_write (opaque=0x14971790, addr=, val=48) at /root/kvm-81/qemu/hw/serial.c:366 #4 0x00000000410eeedc in ?? () #5 0x0000000000129000 in ?? () #6 0x0000000014821fa0 in ?? () #7 0x0000000000000007 in ?? () #8 0x00000000004a54c5 in tlb_set_page_exec (env=0x10ab4, vaddr=46912496956816, paddr=1, prot=-1, mmu_idx=0, is_softmmu=1) at /root/kvm-81/qemu/exec.c:388 #9 0x0000000000512f3b in tlb_fill (addr=345446292, is_write=1, mmu_idx=-1, retaddr=0x0) at /root/kvm-81/qemu/target-i386/op_helper.c:4690 #10 0x00000000004a6bd2 in __ldb_cmmu (addr=9, mmu_idx=0) at /root/kvm-81/qemu/softmmu_template.h:135 #11 0x00000000004a879b in cpu_x86_exec (env1=) at /root/kvm-81/qemu/cpu-exec.c:628 #12 0x000000000040ba29 in main (argc=12, argv=0x7fff67f7a398) at /root/kvm-81/qemu/vl.c:3816 send_all() invokes unix_write() which by design is not breaking out on EAGAIN. The following command is enough to show the problem: qemu-system-x86_64 -m 256 -smp 1 -no-kvm \ -drivefile=/dev/cciss/c0d0,if=scsi,cache=off,boot=on \ -vnc :1 -serial /dev/ttyS0 The guest is running RHEL3 with the parameter 'console=ttyS0' added to grub.conf; the problem appears to be with qemu, so I would expect it to show with any linux guest. This particular host is running RHEL5.2 with kvm-81, but I have also seen the problem with Fedora-9 as the host OS. Yes, the serial port of the server is connected to another system via a null modem. If I change the serial argument to '-serial udp::4555' and use 'nc -u -l localhost 4555 > /dev/ttyS0' I see the guest's boot output show up on the second system as expected. I'd prefer to be able to use the serial port connection directly without nc as a proxy. Suggestions? david