The following reply was made to PR kern/183139; it has been noted by GNATS.
From: Adam McDougall <mcdou...@egr.msu.edu> To: Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger....@citrix.com> Cc: bug-follo...@freebsd.org Subject: Re: kern/183139: ifconfig options on xn0 lost after xen vm migration to another server Date: Wed, 30 Oct 2013 16:58:28 -0400 Thanks, this works! On Tue, Oct 29, 2013 at 10:42:55AM +0100, Roger Pau Monné wrote: On 28/10/13 22:28, Adam McDougall wrote: > So far, it almost works as I expect. It seems to work as long as at > least one option is left (example: options=400<LRO>) but if I have none, > they all come back on migrate. Thanks. Yes, the "resume" condition is not triggered if there isn't any feature enabled. I've updated the patch, now it should work as expected: --- diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c index f9c72e6..52d8c11 100644 --- a/sys/dev/xen/netfront/netfront.c +++ b/sys/dev/xen/netfront/netfront.c @@ -287,6 +287,8 @@ struct netfront_info { multicall_entry_t rx_mcl[NET_RX_RING_SIZE+1]; mmu_update_t rx_mmu[NET_RX_RING_SIZE]; struct ifmedia sc_media; + + bool xn_resume; }; #define rx_mbufs xn_cdata.xn_rx_chain @@ -502,6 +504,7 @@ netfront_resume(device_t dev) { struct netfront_info *info = device_get_softc(dev); + info->xn_resume = true; netif_disconnect_backend(info); return (0); } @@ -2024,13 +2027,28 @@ xn_configure_features(struct netfront_info *np) int err; err = 0; + + if (!np->xn_resume || + ((np->xn_ifp->if_capenable & np->xn_ifp->if_capabilities) + != np->xn_ifp->if_capenable)) { + /* + * Check if current enabled capabilities are available, + * if not switch to default capabilities. + */ #if __FreeBSD_version >= 700000 - if ((np->xn_ifp->if_capenable & IFCAP_LRO) != 0) - tcp_lro_free(&np->xn_lro); + if ((np->xn_ifp->if_capenable & IFCAP_LRO) != 0) + tcp_lro_free(&np->xn_lro); #endif - np->xn_ifp->if_capenable = - np->xn_ifp->if_capabilities & ~(IFCAP_LRO|IFCAP_TSO4); - np->xn_ifp->if_hwassist &= ~CSUM_TSO; + np->xn_ifp->if_capenable = + np->xn_ifp->if_capabilities & ~(IFCAP_LRO|IFCAP_TSO4); + np->xn_ifp->if_hwassist &= ~CSUM_TSO; + } else { + /* + * What we have currently enabled is supported by the + * new host, no need to change anything. + */ + return 0; + } #if __FreeBSD_version >= 700000 if (xn_enable_lro && (np->xn_ifp->if_capabilities & IFCAP_LRO) != 0) { err = tcp_lro_init(&np->xn_lro);
_______________________________________________ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"