[ipxe-devel] vmxnet3 port

Michael Brown mbrown at fensystems.co.uk
Sat Jan 7 00:03:48 UTC 2012

On Friday 06 Jan 2012 18:28:00 Pete Holland wrote:
> 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.

That's interesting to know.  Maybe the issue is specific to the version of 
VMware I was testing with.

> 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)

gcc will optimise ( x % 32 ) to ( x & 0x1f ) anyway.

> #2 Is there a reason you packed the vmxnet3_tx_comp structure but not
> the vmxnet3_rx_comp structure?

My mistake; thanks for catching that!

Since the driver seems to basically work for you, I've pushed it:


and updated the documentation at


> 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
> mrom.
> 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.

The only "hlt" instructions in iPXE are immediately preceded by "sti", so I'm 
fairly sure that the halt can't be happening inside the iPXE code.  Could you 
try narrowing down exactly when it happens?  Using


might help.

> 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).

There was an e1000 VMware issue reported recently with VMware Player 
4.0.1-528992, and that's the one I carried on using for the vmxnet3 
development.  I haven't tested it with any other VMware products yet.  Thanks 
for testing on ESX!


More information about the ipxe-devel mailing list