[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] GPLPV: Respecting SG capability



Hi James,

As you may have heard, the latest GPLPV release doesn't work on Opensolaris dom0. Our backend net driver doesn't support scatter/gather, but it seems that GPLPV now requires it.

I have a fix for this in the frontend which coalesces all NDIS buffers into one ring transaction. With the fix, packets flow again.

Once this is addressed I may go and implement SG in our backend anyway, but I wanted to get this fix into the GPLPV source first to enable networking on older and current dom0s.

The fix as I have it now is around line 229 of xennet_tx.c (see below). I think a further and necessary improvement on this would be to avoid the construction of the header_buf() altogether in the no-sg case. There is also only one tx_sendbuf per driver instance (it just points to tx_hb[0]), and I suppose there should be several and that they should be managed in the same way you deal with the tx_hb[] instances.

Actually, on second look, there is a per-driver-instance tx_lock which must act to serialize all transmits? In which case we only need a single tx_sendbuf anyhow. Would Windows benefit from having a reentrant send routine?

Here is the prototype of the fix.

 if (xi->config_sg == 0) {
      int i;
      ULONG len;
      ULONG offset = 0;
      PNDIS_BUFFER buf;

      buf = pi.first_buffer;
      while (buf) {
          PUCHAR src_addr;

          NdisQueryBufferSafe(buf, &src_addr, &len, NormalPagePriority);

          memcpy((PUCHAR)xi->tx_sendbuf.virtual + offset, src_addr, len);
          offset += len;

          NdisGetNextBuffer(buf, &buf);
      }

tx0->gref = (grant_ref_t)xi->tx_sendbuf.logical.QuadPart >> PAGE_SHIFT; tx0->offset = (USHORT)xi->tx_sendbuf.logical.LowPart & (PAGE_SIZE - 1);
      ASSERT(offset == pi.total_length);
      tx0->size = offset;
      tx0->flags &= ~NETTXF_more_data;
      sg_element = sg->NumberOfElements;
  } else if (header_buf)

Cheers,
- Russ

-----------------------------------------------------
Russ Blaine | Solaris Kernel | russell.blaine@xxxxxxx

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.