Skip to content

Commit

Permalink
8139cp: properly config rx mode after resuming
Browse files Browse the repository at this point in the history
Rx mode should be reset after resming, so unconditionally updating rx
mode rather than conditionally updating based on the value we
remembered, otherwise unexpected value may be used by the nic after
resuming.

btw. I find and test this when debugging guest hibernation in qemu, as
I did not have a 8139cp card in hand, this patch is untested in a
physical 8139cp card, plase review it carefully.

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
jasowang authored and davem330 committed Jan 3, 2012
1 parent 7d03f5a commit f872b23
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions drivers/net/ethernet/realtek/8139cp.c
Expand Up @@ -859,7 +859,6 @@ static void __cp_set_rx_mode (struct net_device *dev)
struct cp_private *cp = netdev_priv(dev);
u32 mc_filter[2]; /* Multicast hash filter */
int rx_mode;
u32 tmp;

/* Note: do not reorder, GCC is clever about common statements. */
if (dev->flags & IFF_PROMISC) {
Expand All @@ -886,11 +885,9 @@ static void __cp_set_rx_mode (struct net_device *dev)
}

/* We can safely update without stopping the chip. */
tmp = cp_rx_config | rx_mode;
if (cp->rx_config != tmp) {
cpw32_f (RxConfig, tmp);
cp->rx_config = tmp;
}
cp->rx_config = cp_rx_config | rx_mode;
cpw32_f(RxConfig, cp->rx_config);

cpw32_f (MAR0 + 0, mc_filter[0]);
cpw32_f (MAR0 + 4, mc_filter[1]);
}
Expand Down

0 comments on commit f872b23

Please sign in to comment.