if_bce.c fix hang after resume

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

if_bce.c fix hang after resume

Richard Hopkins-2
I've managed to produce a patch to fix a hang after resume on my machine and
would much appreciate some help with reviewing the changes, as whilst I've
tried to follow the (excellent) documentation/FAQs this is new to me
especially hardware.

Original problem (on at least 6.6 and 6.7 i386) (dmesg report on bugs@)
* apmd && zzz
resume causes a complete hang due to if_bce.  Other devices are not
reinitialized such as wifi, and not even the CAPS lock LED gets toggled and
the machine is unusable.

This patch produced using the github.com mirror fixes the problem for me so
that resume doesn't cause a hang and bce0 then handles traffic like before the
suspend.

Is there anything I can improve?  Is anyone able to test it works on their
machine too?

Thanks

diff --git if_bce.c if_bce.c
index 7228bba39..223801bcd 100644
--- if_bce.c
+++ if_bce.c
@@ -444,6 +444,7 @@ bce_activate(struct device *self, int act)
         break;
     case DVACT_RESUME:
         if (ifp->if_flags & IFF_UP) {
+            bce_reset(sc);
             bce_init(ifp);
             bce_start(ifp);
         }