On Sun, 2009-08-09 at 07:41 -0700, Steve Langasek wrote: > On Fri, Aug 07, 2009 at 01:08:36PM +0100, Ben Hutchings wrote: > > On Tue, 2009-08-04 at 07:31 -0700, Martin Michlmayr wrote: > > > reopen 494363 > > > thanks > > > > vorlon recently tested 2.6.30 and said this bug is still there. > > > Can you build the module with RTL8169_DEBUG defined and send the kernel > > log messages it generates on load? > > > Given a configured kernel build tree, you should be able to do this > > with: > > rm -f drivers/net/r8169.ko > > make EXTRA_CFLAGS=-DRTL8169_DEBUG drivers/net/r8169.ko > > Here you are: > > [1573779.780000] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded > [1573779.790000] r8169 0000:00:01.0: no PCI Express capability > [1573779.790000] r8169: mac_version = 0x04 > [1573779.790000] eth0: RTL8169sb/8110sb at 0xc8ec0200, 00:14:fd:30:2b:d6, XID 10000000 IRQ 27 > [1573779.800000] r8169: mac_version = 0x04 > [1573779.800000] r8169: Set MAC Reg C+CR Offset 0x82h = 0x01h > [1573779.800000] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded > [1573779.810000] r8169 0000:00:02.0: no PCI Express capability > [1573779.820000] r8169: mac_version = 0x04 > [1573779.820000] eth1: RTL8169sb/8110sb at 0xc8ec4300, 00:14:fd:30:2b:d7, XID 10000000 IRQ 30 > [1573779.830000] r8169: mac_version = 0x04 > [1573779.830000] r8169: Set MAC Reg C+CR Offset 0x82h = 0x01h > [1573780.570000] r8169: eth0: link down > [1573780.570000] ADDRCONF(NETDEV_UP): eth0: link is not ready > [1573781.340000] r8169: eth0: link up > [1573781.340000] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Now that I've looked at the differences between different controller revisions, it appears that the switch in byte ordering for the multicast hash bitmap was made between the RTL8169 family (PCI) and RTL8168 family (PCI Express). The recent fix applied to some members of the latter family. One difference I noted between the vendor driver and the in-tree driver is in the ordering of register writes. It probably doesn't make a difference, but perhaps you could try changing: RTL_W32(MAR0 + 0, mc_filter); RTL_W32(MAR0 + 4, mc_filter); RTL_W32(RxConfig, tmp); to: RTL_W32(RxConfig, tmp); RTL_W32(MAR0 + 0, mc_filter); RTL_W32(MAR0 + 4, mc_filter); in rtl_set_rx_mode(). Ben. -- Ben Hutchings Unix is many things to many people, but it's never been everything to anybody.
Description: This is a digitally signed message part