diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-09-02 17:52:37 +0000 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-09-02 17:52:37 +0000 |
commit | 936fbe104f55f37c0c7159c73062a18ac3d7a3dc (patch) | |
tree | 14b6b7c327c56e91196f70fdc5594cf41323364b /tools/ioemu/hw/mc146818rtc.c | |
parent | c14bd442517aa7b2028ba3cbfabe49b7ecf5e613 (diff) | |
download | xen-936fbe104f55f37c0c7159c73062a18ac3d7a3dc.tar.gz xen-936fbe104f55f37c0c7159c73062a18ac3d7a3dc.tar.bz2 xen-936fbe104f55f37c0c7159c73062a18ac3d7a3dc.zip |
Qemu-dm dumps core with the pcnet device. This patches fixes it.
When pcnet_receive calls pcnet_poll, which polls the receive and the send
rings. Whenever there is an element in the send ring that is owned by
the Lance chip it will call pcnet_transmit and send it. When the element
is the endp(acket), pcnet_transmit will copy it out, send the packet
(qemu_send_packet) and then clear the owner bit. Somewherer along the
qemu_send_packet execution path, pcnet_recieve is called again, which
calls pcnet_poll and starts this whole process again. This very rapidly
leads to a stack overflow and crashes qemu.
The fix is simple, stop the recursion. Once the packet is copied into
qemu datatstructure (before qemu_send_packet is called!), the owner bit
on the ring element should be cleared.
Signed-Off-By: Leendert van Doorn <leendert@watson.ibm.com>
Diffstat (limited to 'tools/ioemu/hw/mc146818rtc.c')
0 files changed, 0 insertions, 0 deletions