From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Max Filippov <jcmvbkbc@gmail.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] tap networking - how?
Date: Thu, 13 Feb 2014 21:34:49 +1100 [thread overview]
Message-ID: <52FC9FC9.9000103@ozlabs.ru> (raw)
In-Reply-To: <CAMo8BfJZB9DzFnz7Y6ecNAz+G3ePVmrvCDqb+sVighK746XNew@mail.gmail.com>
On 02/13/2014 07:40 PM, Max Filippov wrote:
> Hi,
>
> On Thu, Feb 13, 2014 at 11:34 AM, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>> Hi!
>>
>> I am debugging spapr-vlan and hit the following issue.
>>
>> When I run QEMU as below, the kernel's DHCP client does not continue till I
>> hit any key in console. If I replace spapr-vlan with
>> e1000/rtl8139/virtio-net, everything is just fine. If I use "user" network
>> - everything is fine too. So the problem is with combination of spapr-vlan
>> + tap.
>>
>> The issue looks like - the guest kernel boots and then prints:
>> Sending DHCP requests ..
>> and it keeps printing dots till I press key or timeout expires. tcpdump
>> (running on the tap interface) shows one DHCP request and one DHCP response.
>>
>> What normally happens is that QEMU calls os_host_main_loop_wait() which
>> calls qemu_poll_ns() and it is sitting there till eventfd signals.
>> This eventfd is registered via qemu_init_main_loop() -> aio_context_new()
>> -> aio_set_event_notifier() but I cannot find where it gets passed to the
>> kernel (otherwise why would we need eventfd?). When eventfd signals, QEMU
>> calls qemu_iohandler_poll() which checks if TAP device has something to
>> read and eventually calls tap_send().
>>
>> However in my bad example QEMU does not exit qemu_poll_ns() on eventfd,
>> only on stdin event.
>>
>> I can see AIO eventfd created and event_notifier_test_and_clear() is called
>> on it before the kernel starts using spapr-vlan.
>>
>> So. h_send_logical_lan() is called to sent a DHCP request packet. Now I
>> expect eventfd to signal but this does not happen. Have I missed some reset
>> or notification request or "bottom half" (virtio-net uses them but
>> e1000/rtl8139 do not)?
>
> Sounds pretty much like the problem I had recently with opencores
> 10/100 MAC: https://lists.gnu.org/archive/html/qemu-devel/2014-02/msg00073.html
>
> Does the following help?:
Yes, it does, thanks a lot!
While we are here and you seem to understand this stuff -
how is tap expected to work to deliver a packet from the external network
to the guest? I mean what event should be triggered in what order? My brain
is melting :( I just cannot see how receiving a packet on "tap" in the host
kernel can make os_host_main_loop_wait() exit in QEMU so it could call
qemu_iohandler_poll() and do the job. Thanks!
> diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c
> index 1bd6f50..2436b5e 100644
> --- a/hw/net/spapr_llan.c
> +++ b/hw/net/spapr_llan.c
> @@ -404,6 +404,7 @@ static target_ulong
> h_add_logical_lan_buffer(PowerPCCPU *cpu,
> vio_stq(sdev, dev->buf_list + dev->add_buf_ptr, buf);
>
> dev->rx_bufs++;
> + qemu_flush_queued_packets(qemu_get_queue(dev->nic));
>
> DPRINTF("h_add_logical_lan_buffer(): Added buf ptr=%d rx_bufs=%d"
> " bd=0x%016llx\n", dev->add_buf_ptr, dev->rx_bufs,
>
>
--
Alexey
next prev parent reply other threads:[~2014-02-13 10:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-13 7:34 [Qemu-devel] tap networking - how? Alexey Kardashevskiy
2014-02-13 8:40 ` Max Filippov
2014-02-13 10:34 ` Alexey Kardashevskiy [this message]
2014-02-13 12:23 ` Max Filippov
2014-02-13 13:42 ` Alexey Kardashevskiy
2014-02-13 14:02 ` Max Filippov
2014-02-13 14:06 ` Alexey Kardashevskiy
2014-02-13 14:17 ` Max Filippov
2014-02-13 14:25 ` Alexey Kardashevskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52FC9FC9.9000103@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=jcmvbkbc@gmail.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.