svn commit: r197675 - in stable/7/sys: . contrib/pf dev/mxge
Andrew Gallatin
gallatin at FreeBSD.org
Thu Oct 1 15:40:09 UTC 2009
Author: gallatin
Date: Thu Oct 1 15:40:08 2009
New Revision: 197675
URL: http://svn.freebsd.org/changeset/base/197675
Log:
MFC: more fixes for mxge watchdog reset handling (194761 197645)
194761: Fix bug where device would loose promisc setting when reset.
197645: Restore the PCI Express control register after reset
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/mxge/if_mxge.c
stable/7/sys/dev/mxge/if_mxge_var.h
Modified: stable/7/sys/dev/mxge/if_mxge.c
==============================================================================
--- stable/7/sys/dev/mxge/if_mxge.c Thu Oct 1 15:33:53 2009 (r197674)
+++ stable/7/sys/dev/mxge/if_mxge.c Thu Oct 1 15:40:08 2009 (r197675)
@@ -1296,7 +1296,7 @@ mxge_reset(mxge_softc_t *sc, int interru
}
sc->rdma_tags_available = 15;
status = mxge_update_mac_address(sc);
- mxge_change_promisc(sc, 0);
+ mxge_change_promisc(sc, sc->ifp->if_flags & IFF_PROMISC);
mxge_change_pause(sc, sc->pause);
mxge_set_multicast_list(sc);
return status;
@@ -3419,10 +3419,16 @@ mxge_setup_cfg_space(mxge_softc_t *sc)
if (pci_find_extcap(dev, PCIY_EXPRESS, ®) == 0) {
lnk = pci_read_config(dev, reg + 0x12, 2);
sc->link_width = (lnk >> 4) & 0x3f;
-
- pectl = pci_read_config(dev, reg + 0x8, 2);
- pectl = (pectl & ~0x7000) | (5 << 12);
- pci_write_config(dev, reg + 0x8, pectl, 2);
+
+ if (sc->pectl == 0) {
+ pectl = pci_read_config(dev, reg + 0x8, 2);
+ pectl = (pectl & ~0x7000) | (5 << 12);
+ pci_write_config(dev, reg + 0x8, pectl, 2);
+ sc->pectl = pectl;
+ } else {
+ /* restore saved pectl after watchdog reset */
+ pci_write_config(dev, reg + 0x8, sc->pectl, 2);
+ }
}
/* Enable DMA and Memory space access */
@@ -3533,6 +3539,9 @@ mxge_watchdog_reset(mxge_softc_t *sc)
/* release all TX locks */
for (s = 0; s < num_tx_slices; s++) {
ss = &sc->ss[s];
+#ifdef IFNET_BUF_RING
+ mxge_start_locked(ss);
+#endif
mtx_unlock(&ss->tx.mtx);
}
}
@@ -3795,7 +3804,7 @@ mxge_fetch_tunables(mxge_softc_t *sc)
mxge_ticks = hz / 2;
sc->pause = mxge_flow_control;
if (mxge_rss_hash_type < MXGEFW_RSS_HASH_TYPE_IPV4
- || mxge_rss_hash_type > MXGEFW_RSS_HASH_TYPE_SRC_PORT) {
+ || mxge_rss_hash_type > MXGEFW_RSS_HASH_TYPE_MAX) {
mxge_rss_hash_type = MXGEFW_RSS_HASH_TYPE_SRC_PORT;
}
}
Modified: stable/7/sys/dev/mxge/if_mxge_var.h
==============================================================================
--- stable/7/sys/dev/mxge/if_mxge_var.h Thu Oct 1 15:33:53 2009 (r197674)
+++ stable/7/sys/dev/mxge/if_mxge_var.h Thu Oct 1 15:40:08 2009 (r197675)
@@ -254,6 +254,7 @@ struct mxge_softc {
struct sysctl_ctx_list slice_sysctl_ctx;
char *mac_addr_string;
uint8_t mac_addr[6]; /* eeprom mac address */
+ uint16_t pectl; /* save PCIe CTL state */
char product_code_string[64];
char serial_number_string[64];
char cmd_mtx_name[16];
More information about the svn-src-stable-7
mailing list