Clean up mxge's use of callouts as pointed out by jhb,
and handle NIC hardware watchdog resets.
- remove buggy code at the top of mxge_tick() which tried to detect a race which is already detected in the kernel's callout code.
- move callout_stop() and callout_reset() into mxge_close() mxge_open() rather than doing the callout manipulation all over the place.
- use callout_drain(), rather than callout_stop() to prevent a potential race between mxge_tick() and mxge_detach() which could lead to softclock using a destroyed mutex
- restructure the mxge_tick() and mxge_watchdog_reset() routines to avoid resetting a callout, and then immediately stopping it if the watchdog reset routine is called, and fails.
- enable the driver to handle NIC hardware watchdog resets by restoring the NIC's PCI config space, which is lost when the NIC hardware watchdog triggers.
Reviewed by: jhb (previus version)