Date: Fri, 19 Mar 2010 10:47:09 -0700 From: Pyun YongHyeon <pyunyh@gmail.com> To: "Prokofyev S.P." <proks@skylinetele.com> Cc: jfv@FreeBSD.org, freebsd-net@freebsd.org Subject: Re: Please pay attention to fix bug kern/141285 Message-ID: <20100319174709.GQ9373@michelle.cdnetworks.com> In-Reply-To: <20100319174450.GP9373@michelle.cdnetworks.com> References: <4BA38CEC.9060205@skylinetele.com> <20100319174450.GP9373@michelle.cdnetworks.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--qlTNgmc+xy1dBmNv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Mar 19, 2010 at 10:44:50AM -0700, Pyun YongHyeon wrote: > On Fri, Mar 19, 2010 at 04:40:44PM +0200, Prokofyev S.P. wrote: > > Hi ALL ! > > > > Please pay attention to fix bug kern/141285(kern/141843) ! > > > > igb(4) also has a similar issue but it seems igb(4) does not even > advertise IFCAP_VLAN_HWFILTER capability. igb(4) may have to remove > VLAN event handler or should implement IFCAP_VLAN_HWFILTER to > support VLAN hardware filtering. > > I have a patch for the hardware VLAN filtering of em(4). But it > wouldn't address the issue reported in the PR. The root cause of > issue was em(4) wants to reset controller whenever new VLAN is > registered/unregistered. I'm not sure this is requirement of > hardware. If this is requirement of hardware there is no way to > avoid the controller reset unless you disable vlanhwfilter feature. > > #ifconfig em0 -vlanhwfilter > > em(4) in HEAD disabled VLAN hardware filtering by default so if you > use that version you wouldn't encounter the issue again. Attached > patch is small diff for VLAN hardware filtering which tries to > avoid unnecessary controller reset and added missing lock. If > hardware allows dynamic changing of VLAN filtering table we could > completely bypass the controller reset. Jack may know the details. Oops, posted old patch. Here is new one. --qlTNgmc+xy1dBmNv Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="em.vlan_hwfilter.patch2" Index: sys/dev/e1000/if_em.c =================================================================== --- sys/dev/e1000/if_em.c (revision 205300) +++ sys/dev/e1000/if_em.c (working copy) @@ -4652,10 +4652,15 @@ index = (vtag >> 5) & 0x7F; bit = vtag & 0x1F; + EM_CORE_LOCK(adapter); em_shadow_vfta[index] |= (1 << bit); ++adapter->num_vlans; /* Re-init to load the changes */ - em_init(adapter); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 && + (ifp->if_capabilities & IFCAP_VLAN_HWFILTER) != 0 && + (ifp->if_capenable & IFCAP_VLAN_HWFILTER) != 0) + em_init_locked(adapter); + EM_CORE_UNLOCK(adapter); } /* @@ -4676,10 +4681,15 @@ index = (vtag >> 5) & 0x7F; bit = vtag & 0x1F; + EM_CORE_LOCK(adapter); em_shadow_vfta[index] &= ~(1 << bit); --adapter->num_vlans; /* Re-init to load the changes */ - em_init(adapter); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 && + (ifp->if_capabilities & IFCAP_VLAN_HWFILTER) != 0 && + (ifp->if_capenable & IFCAP_VLAN_HWFILTER) != 0) + em_init_locked(adapter); + EM_CORE_UNLOCK(adapter); } static void --qlTNgmc+xy1dBmNv--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100319174709.GQ9373>