On 02/10/2012 01:26 AM, Paul Brook wrote:
The reason we have this is because there are bits of code that rely on
polling.  IIRC slirp and the floppy DMA engine were the main culprits.
qemu_calculate_timeout is an ugly hack to poll at least once a second,
allowing the guest to make forward progress when we miss an event.

At least the floppy DMA engine is fine with it, it uses idle bottom halves (which are a hack and could be replaced by timers, but that's not relevant now).

Slirp's timeouts indeed require polling.

                if (time_fasttimo && ((curtime - time_fasttimo) >= 2)) {
                        tcp_fasttimo(slirp);
                        time_fasttimo = 0;
                }
                if (do_slowtimo && ((curtime - last_slowtimo) >= 499)) {
                        ip_slowtimo(slirp);
                        tcp_slowtimo(slirp);
                        last_slowtimo = curtime;
                }

Paolo

Reply via email to