From dan@kgw.obluda.cz  Mon Nov 10 21:21:11 2008
Return-Path: <dan@kgw.obluda.cz>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7147D106567A;
	Mon, 10 Nov 2008 21:21:11 +0000 (UTC)
	(envelope-from dan@kgw.obluda.cz)
Received: from kgw.obluda.cz (kgw.obluda.cz [193.179.199.50])
	by mx1.freebsd.org (Postfix) with ESMTP id DC7568FC0A;
	Mon, 10 Nov 2008 21:21:10 +0000 (UTC)
	(envelope-from dan@kgw.obluda.cz)
Received: from kgw.obluda.cz (localhost [127.0.0.1])
	by kgw.obluda.cz (8.14.2/8.14.2) with ESMTP id mAAKfCxJ004085;
	Mon, 10 Nov 2008 21:41:12 +0100 (CET)
	(envelope-from dan@kgw.obluda.cz)
Received: (from root@localhost)
	by kgw.obluda.cz (8.14.2/8.14.2/Submit) id mAAKfBI4004084;
	Mon, 10 Nov 2008 21:41:11 +0100 (CET)
	(envelope-from dan)
Message-Id: <200811102041.mAAKfBI4004084@kgw.obluda.cz>
Date: Mon, 10 Nov 2008 21:41:11 +0100 (CET)
From: Dan Lukes <dan@obluda.cz>
Reply-To: Dan Lukes <dan@obluda.cz>
To: FreeBSD-gnats-submit@freebsd.org
Cc: glebius@freebsd.org
Subject: [ PATCH ] VGE's [rt]xcsum can't be switched off
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         128766
>Category:       kern
>Synopsis:       [patch] vge(4) [rt]xcsum can't be switched off
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    yongari
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Nov 10 21:30:01 UTC 2008
>Closed-Date:    Mon Jan 12 03:34:32 UTC 2009
>Last-Modified:  Mon Jan 12 03:40:04 UTC 2009
>Originator:     Dan Lukes
>Release:        FreeBSD
>Organization:
Obludarium
>Environment:
FreeBSD >=6.0, >=7.0, CURRENT

if_vge.c revisions
HEAD:     >=1.19 (affect all 7.x releases also)
RELENG_6: >=1.14.2.3 (e.g. 6.0-RELEASE and newer)


>Description:
	During the Glebius's "big polling(4) cleanup"
of the VGE network card driver the processing of 
(re)set of {r|t}xcsum capabilities has been broken.

The line
ifp->if_capenable &= -IFCAP_HWCSUM; 
disapeared from code and the current code ...
 -----------
if (mask & IFCAP_HWCSUM) {
   ifp->if_capenable |= ifr->ifr_reqcap & (IFCAP_HWCSUM);
 -----------

... allow no deactivation of capabilities. 
As both of *csum are activated on default, there 
is no way to turn them off.

>How-To-Repeat:
	Try ifconfig vge0 -txcsum -rxcsum - it do nothing

>Fix:

I hope it will be MFCed not only to RELENG_7 but into RELENG_6
as well (I not trying to ask it will be MFCed into RELENG_6_4 also)


--- /usr/src/sys/dev/vge/if_vge.c.orig	2008-11-10 16:50:21.000000000 +0100
+++ /usr/src/sys/dev/vge/if_vge.c	2008-11-10 21:01:08.000000000 +0100
@@ -2230,7 +2230,7 @@
 		}
 #endif /* DEVICE_POLLING */
 		if (mask & IFCAP_HWCSUM) {
-			ifp->if_capenable |= ifr->ifr_reqcap & (IFCAP_HWCSUM);
+			ifp->if_capenable ^= (mask & IFCAP_HWCSUM);
 			if (ifp->if_capenable & IFCAP_TXCSUM)
 				ifp->if_hwassist = VGE_CSUM_FEATURES;
 			else
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->yongari 
Responsible-Changed-By: yongari 
Responsible-Changed-When: Tue Nov 11 01:22:14 UTC 2008 
Responsible-Changed-Why:  
Grab. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128766 
State-Changed-From-To: open->feedback 
State-Changed-By: yongari 
State-Changed-When: Tue Nov 11 01:25:26 UTC 2008 
State-Changed-Why:  
It seems that the hardware does not require reinitialization when 
checksum offload configuration is changed. 
Would you try patch at the followng URL? 
http://people.freebsd.org/~yongari/vge/vge.csum.patch 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128766 
State-Changed-From-To: feedback->patched 
State-Changed-By: yongari 
State-Changed-When: Thu Nov 13 04:11:21 UTC 2008 
State-Changed-Why:  
Submitter confirms patch fixed the issue. 
Thanks for report and testing! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128766 
State-Changed-From-To: patched->closed 
State-Changed-By: yongari 
State-Changed-When: Mon Jan 12 03:33:12 UTC 2009 
State-Changed-Why:  
MFC to stable/7 done. Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128766 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/128766: commit references a PR
Date: Mon, 12 Jan 2009 03:33:06 +0000 (UTC)

 Author: yongari
 Date: Mon Jan 12 03:32:54 2009
 New Revision: 187078
 URL: http://svn.freebsd.org/changeset/base/187078
 
 Log:
   MFC r184908:
     Fix Rx/Tx checksum offload ioctl handling. Now checksum offload
     can be controlled by ifconfig(8). Note, VLAN hardware tagging
     controls still lacks required handler but it requires more driver
     cleanups so I didn't touch that part.
   
     PR:   kern/128766
 
 Modified:
   stable/7/sys/   (props changed)
   stable/7/sys/contrib/pf/   (props changed)
   stable/7/sys/dev/ath/ath_hal/   (props changed)
   stable/7/sys/dev/cxgb/   (props changed)
   stable/7/sys/dev/vge/if_vge.c
 
 Modified: stable/7/sys/dev/vge/if_vge.c
 ==============================================================================
 --- stable/7/sys/dev/vge/if_vge.c	Mon Jan 12 03:26:52 2009	(r187077)
 +++ stable/7/sys/dev/vge/if_vge.c	Mon Jan 12 03:32:54 2009	(r187078)
 @@ -2226,15 +2226,17 @@ vge_ioctl(ifp, command, data)
  			}
  		}
  #endif /* DEVICE_POLLING */
 -		if (mask & IFCAP_HWCSUM) {
 -			ifp->if_capenable |= ifr->ifr_reqcap & (IFCAP_HWCSUM);
 -			if (ifp->if_capenable & IFCAP_TXCSUM)
 -				ifp->if_hwassist = VGE_CSUM_FEATURES;
 +		if ((mask & IFCAP_TXCSUM) != 0 &&
 +		    (ifp->if_capabilities & IFCAP_TXCSUM) != 0) {
 +			ifp->if_capenable ^= IFCAP_TXCSUM;
 +			if ((ifp->if_capenable & IFCAP_TXCSUM) != 0)
 +				ifp->if_hwassist |= VGE_CSUM_FEATURES;
  			else
 -				ifp->if_hwassist = 0;
 -			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
 -				vge_init(sc);
 +				ifp->if_hwassist &= ~VGE_CSUM_FEATURES;
  		}
 +		if ((mask & IFCAP_RXCSUM) != 0 &&
 +		    (ifp->if_capabilities & IFCAP_RXCSUM) != 0)
 +			ifp->if_capenable ^= IFCAP_RXCSUM;
  	    }
  		break;
  	default:
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
