[ipxe-devel] vmxnet3 port

Pete Holland pholland27 at gmail.com
Fri Jan 6 18:28:00 UTC 2012

I just wanted to quickly say thank you so much for posting your port.
It is much cleaner and easier to work with than
the linux driver.  I still am not sure what is materially different in
what you did for initialization than what I had, but since this port
is all around better, I'll just start with this.

I'm not sure if I'm seeing your rx completion issue.  When I watch the
number of completions, I get 0 or 1 per rx_poll call.  I would expect
2 completions per poll if it were waiting for two packets before
writing the completions to guest memory.

I do have a couple of questions:
#1 I noticed is that you are modding the rx descriptor index from the
completion descriptor by the number of rx descriptors in order
to make sure it is in range.
Is there a reason you are doing it this instead of just masking off
the bottom 12 bits that correspond to the index (the upper bits are
used for things like the incoming queue id, the EOP/SOP markers, and a
couple of other pieces of metadata (RSS hash type and whether
the checksum has been caculated)). (same thing on the tx descriptor side)
#2 Is there a reason you packed the vmxnet3_tx_comp structure but not
the vmxnet3_rx_comp structure?

So the problem I'm actually having now doesn't seem to be specific to
the vmxnet3 driver as I'm able to reproduce it with the e1000 ipxe
I can obtain the DHCP address, load pxelinux.0 and load the final
image via tftp, but then, at some point (perhaps when it tries to jump
to the image, definitely after it
calls pxeenv_undi_shutdown and closes the device ) I get a message in
vmware.log about the guestOS halting the CPU:

Jan 06 01:11:47.401: vcpu-0| Vix: [8454678 vmxCommands.c:9609]:
VMAutomation_HandleCLIHLTEvent. Do nothing.
Jan 06 01:11:47.402: vcpu-0| MsgHint: msg.monitorevent.halt (sent)
Jan 06 01:11:47.402: vcpu-0| The CPU has been disabled by the guest
operating system. Power off or reset the virtual machine.

I know the actual image I'm loading is good, because if I go back to
the default vmware PXE client it works fine.
One question I have is what version of ESX were you (or the other iPXE
devs who tested the e1000, e1000e and pcnet32 drivers) using?
I'm on 4.1.0 (build 348481).

Again, thank you for all your help.  Nothing like writing a device
driver for a device that you don't have a spec for and can't attach an
analyzer to the pins, eh?

- Pete

On Fri, Jan 6, 2012 at 5:16 AM, Michael Brown <mbrown at fensystems.co.uk> wrote:
> On Friday 06 Jan 2012 08:51:47 Alessandro Salvatori wrote:
>> so, ipxe never does polling for packets. a la Linux NAPI?
> It does; the problem is that the RX completion descriptors for the first packet
> is not written into the guest's memory until the second packet has been
> received.
> So far, I have been unable to think of a reason why this might be happening.
> Michael
> _______________________________________________
> ipxe-devel mailing list
> ipxe-devel at lists.ipxe.org
> https://lists.ipxe.org/mailman/listinfo/ipxe-devel

More information about the ipxe-devel mailing list