Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Jan 2016 20:54:55 +0800
From:      Sepherosa Ziehau <sephe@freebsd.org>
To:        "Bjoern A. Zeeb" <bz@freebsd.org>, Xin LI <delphij@freebsd.org>,  Adrian Chadd <adrian@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r293719 - head/sys/dev/hyperv/netvsc
Message-ID:  <CAMOc5czJ6s1=BNP5GLE3-bYgijk-JfeixBhk1q1S29LD6fbLCg@mail.gmail.com>
In-Reply-To: <alpine.BSF.2.00.1601131047330.92377@ai.fobar.qr>
References:  <201601120130.u0C1UpvA074721@repo.freebsd.org> <alpine.BSF.2.00.1601131047330.92377@ai.fobar.qr>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
The breakage is all my fault.  Patch is attached.  Wait for mentors approval.

Thanks,
sephe

On Wed, Jan 13, 2016 at 6:49 PM, Bjoern A. Zeeb <bz@freebsd.org> wrote:
> On Tue, 12 Jan 2016, Sepherosa Ziehau wrote:
>
>> Author: sephe
>> Date: Tue Jan 12 01:30:51 2016
>> New Revision: 293719
>> URL: https://svnweb.freebsd.org/changeset/base/293719
>>
>> Log:
>>  hyperv/hn: Implement LRO
>>
>>  - Implement the LRO using tcp_lro APIs, and LRO is enabled by default.
>
>
> Which are only available if INET or INET6 are compiled into the kernel.
> Unfortunately this breaks kernel builds that do not include IPv4 or IPv6
> support.
>
> Can you please put appropriate #if defined(INET6) || defined(INET)  in
> place?
>
>
>
>>  Differential Revision: https://reviews.freebsd.org/D4824
>>
>> Modified:
>>  head/sys/dev/hyperv/netvsc/hv_net_vsc.c
>>  head/sys/dev/hyperv/netvsc/hv_net_vsc.h
>>  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
>
>
> hv_netvsc_drv_freebsd.o: In function `netvsc_recv':
> /scratch/tmp/bz/head.svn/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c:(.text+0x483):
> undefined reference to `tcp_lro_rx'
> hv_netvsc_drv_freebsd.o: In function `netvsc_recv_rollup':
> /scratch/tmp/bz/head.svn/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c:(.text+0x5ce):
> undefined reference to `tcp_lro_flush'
> hv_netvsc_drv_freebsd.o: In function `netvsc_attach':
> /scratch/tmp/bz/head.svn/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c:(.text+0x901):
> undefined reference to `tcp_lro_init'
> hv_netvsc_drv_freebsd.o: In function `netvsc_detach':
> /scratch/tmp/bz/head.svn/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c:(.text+0xca8):
> undefined reference to `tcp_lro_free'
> --- kernel ---
> *** [kernel] Error code 1
> bmake: stopped in /storage/head/obj/scratch/tmp/bz/head.svn/sys/LINT-NOIP
>
>
>>  head/sys/dev/hyperv/netvsc/hv_rndis.h
>>  head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
>>  head/sys/dev/hyperv/netvsc/hv_rndis_filter.h



-- 
Tomorrow Will Never Die

[-- Attachment #2 --]
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
index 68f822a..fd23db9 100644
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -391,12 +391,14 @@ netvsc_attach(device_t dev)
 		sc->hn_carrier = 1;
 	}
 
+#if defined(INET) || defined(INET6)
 	tcp_lro_init(&sc->hn_lro);
 	/* Driver private LRO settings */
 	sc->hn_lro.ifp = ifp;
 #ifdef HN_LRO_HIWAT
 	sc->hn_lro.lro_hiwat = sc->hn_lro_hiwat;
 #endif
+#endif	/* INET || INET6 */
 
 	ether_ifattach(ifp, device_info.mac_addr);
 
@@ -475,7 +477,9 @@ netvsc_detach(device_t dev)
 	hv_rf_on_device_remove(hv_device, HV_RF_NV_DESTROY_CHANNEL);
 
 	ifmedia_removeall(&sc->hn_media);
+#if defined(INET) || defined(INET6)
 	tcp_lro_free(&sc->hn_lro);
+#endif
 
 	return (0);
 }
@@ -1083,6 +1087,7 @@ skip:
 	if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
 
 	if ((ifp->if_capenable & IFCAP_LRO) && do_lro) {
+#if defined(INET) || defined(INET6)
 		struct lro_ctrl *lro = &sc->hn_lro;
 
 		if (lro->lro_cnt) {
@@ -1092,6 +1097,7 @@ skip:
 				return 0;
 			}
 		}
+#endif
 	}
 
 	/* We're not holding the lock here, so don't release it */
@@ -1103,6 +1109,7 @@ skip:
 void
 netvsc_recv_rollup(struct hv_device *device_ctx)
 {
+#if defined(INET) || defined(INET6)
 	hn_softc_t *sc = device_get_softc(device_ctx->device);
 	struct lro_ctrl *lro = &sc->hn_lro;
 	struct lro_entry *queued;
@@ -1111,6 +1118,7 @@ netvsc_recv_rollup(struct hv_device *device_ctx)
 		SLIST_REMOVE_HEAD(&lro->lro_active, next);
 		tcp_lro_flush(lro, queued);
 	}
+#endif
 }
 
 /*

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAMOc5czJ6s1=BNP5GLE3-bYgijk-JfeixBhk1q1S29LD6fbLCg>