|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |