On 08/27/11 18:46, Ben C. wrote:
> Hello,
> 
> Yes indeed.  I've verified on 8.2 and BETA1.  Seemingly exact same
> issue.  Running a NetBSD(-CURRENT) dom0.  Happy to see progress but
> it's not quite there yet I guess.
> 
> I've tried changing the model= line around and some other random,
> brute-force like tweaks but nothing seems to work.  I can ping
> internal and external hosts, but just can't seem to carry on a regular
> TCP/IP conversation.
> 
> I also found this :
> http://www.mail-archive.com/freebsd-xen@freebsd.org/msg00516.html
> 
> Where someone running a Debian Lenny dom0 was experiencing almost the
> exact same issues I have.
> 
> FreeBSD (or, any OS) has pretty poor performance running under full
> HVM .. PV drivers only work for i386 and I wouldn't be surprised if I
> experienced the same issues.  (No time to test really..)
> 
> Does anyone else have any input on this?
> 
> Thanks, Ben C.

Hello Ben,

Someone (I don't recall who, cleared my INBOX and then read this mail..)
sent me a patch about 2 weeks ago which solved the issue for me.

If you [reader]'re the one who wrote the patch, once again my thanks,
you made it possible for me to complete the project I was working on.

I'm not sure if this has been committed in the mean time, so here's the
reminder to do so before 9.0-RELEASE, in case this one got lost!

Keep up the good work!

Regards,

Hugo
-- sys/dev/xen/netfront/netfront.c.orig 2011-08-09 17:48:50.188600897 +0400
+++ sys/dev/xen/netfront/netfront.c     2011-08-09 17:52:47.289424716 +0400
@@ -261,6 +261,7 @@
        u_int irq;
        u_int copying_receiver;
        u_int carrier;
+       u_int sg_allowed;
                
        /* Receive-ring batched refills. */
 #define RX_MIN_TARGET 32
@@ -1494,7 +1495,7 @@
         * deal with nfrags > MAX_TX_REQ_FRAGS, which is a quirk of
         * the Linux network stack.
         */
-       if (nfrags > MAX_TX_REQ_FRAGS) {
+       if (nfrags > (sc->sg_allowed? MAX_TX_REQ_FRAGS : 1)) {
                m = m_defrag(m_head, M_DONTWAIT);
                if (!m) {
                        /*
@@ -1879,6 +1880,39 @@
        if_link_state_change(ifp, LINK_STATE_DOWN);
 }
 
+static void
+xennet_set_features(device_t dev, struct netfront_info *np)
+{
+       struct ifnet *ifp;
+       int val;
+
+       device_printf(dev, "backend features:");
+
+       if (xs_scanf(XST_NIL, xenbus_get_otherend_path(np->xbdev),
+               "feature-sg", NULL, "%d", &val) < 0)
+               val = 0;
+
+       np->sg_allowed = val;
+
+       if (val)
+               printf(" feature-sg");
+
+       if (xs_scanf(XST_NIL, xenbus_get_otherend_path(np->xbdev),
+               "feature-gso-tcpv4", NULL, "%d", &val) < 0)
+               val = 0;
+
+       if (val == 0) {
+               ifp = np->xn_ifp;
+               ifp->if_capabilities &= ~(IFCAP_TSO4|IFCAP_LRO);
+               ifp->if_capenable &= ~(IFCAP_TSO4|IFCAP_LRO);
+               ifp->if_hwassist &= ~(CSUM_TSO);
+               xn_enable_lro = 0;
+       } else
+               printf(" feature-gso-tcp4");
+
+       printf("\n");
+}
+
 /* START of Xenolinux helper functions adapted to FreeBSD */
 int
 network_connect(struct netfront_info *np)
@@ -1910,6 +1944,8 @@
        if (error) 
                return (error);
        
+       xennet_set_features(np->xbdev, np);
+
        /* Step 1: Reinitialise variables. */
        netif_release_tx_bufs(np);
_______________________________________________
freebsd-xen@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-xen
To unsubscribe, send any mail to "freebsd-xen-unsubscr...@freebsd.org"

Reply via email to