diff options
-rw-r--r-- | sys/pci/if_sis.c | 4 | ||||
-rw-r--r-- | sys/pci/if_sisreg.h | 1 |
2 files changed, 5 insertions, 0 deletions
diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c index 0db8747..7e15dae 100644 --- a/sys/pci/if_sis.c +++ b/sys/pci/if_sis.c @@ -2044,6 +2044,7 @@ sis_init(xsc) * Cancel pending I/O and free all RX/TX buffers. */ sis_stop(sc); + sc->sis_stopped = 0; #ifdef notyet if (sc->sis_type == SIS_TYPE_83815 && sc->sis_srr >= NS_SRR_16A) { @@ -2379,6 +2380,8 @@ sis_stop(sc) register int i; struct ifnet *ifp; + if (sc->sis_stopped) + return; SIS_LOCK(sc); ifp = &sc->arpcom.ac_if; ifp->if_timer = 0; @@ -2431,6 +2434,7 @@ sis_stop(sc) bzero(sc->sis_ldata.sis_tx_list, sizeof(sc->sis_ldata.sis_tx_list)); + sc->sis_stopped = 1; SIS_UNLOCK(sc); return; diff --git a/sys/pci/if_sisreg.h b/sys/pci/if_sisreg.h index e39bd08..aebc2af 100644 --- a/sys/pci/if_sisreg.h +++ b/sys/pci/if_sisreg.h @@ -470,6 +470,7 @@ struct sis_softc { bus_dma_tag_t sis_tag; struct sis_ring_data sis_cdata; struct callout sis_stat_ch; + int sis_stopped; #ifdef DEVICE_POLLING int rxcycles; #endif |