Author: hselasky
Date: Wed Nov  7 18:44:05 2012
New Revision: 242702
URL: http://svnweb.freebsd.org/changeset/base/242702

Log:
  The tty_inwakeup callback appears to be called both locked and unlocked.
  Handle the required locking automatically for now.
  
  MFC after:    1 weeks

Modified:
  head/sys/dev/usb/serial/usb_serial.c

Modified: head/sys/dev/usb/serial/usb_serial.c
==============================================================================
--- head/sys/dev/usb/serial/usb_serial.c        Wed Nov  7 17:41:17 2012        
(r242701)
+++ head/sys/dev/usb/serial/usb_serial.c        Wed Nov  7 18:44:05 2012        
(r242702)
@@ -788,15 +788,20 @@ ucom_inwakeup(struct tty *tp)
 {
        struct ucom_softc *sc = tty_softc(tp);
        uint16_t pos;
+       int locked;
 
        if (sc == NULL)
                return;
 
-       tty_lock(tp);
+       locked = mtx_owned(sc->sc_mtx);
+
+       if (locked == 0)
+               tty_lock(tp);
 
        if (ttydisc_can_bypass(tp) != 0 || 
            (sc->sc_flag & UCOM_FLAG_HL_READY) == 0) {
-               tty_unlock(tp);
+               if (locked == 0)
+                       tty_unlock(tp);
                return;
        }
 
@@ -821,7 +826,8 @@ ucom_inwakeup(struct tty *tp)
            (sc->sc_flag & UCOM_FLAG_RTS_IFLOW))
                ucom_rts(sc, 0);
 
-       tty_unlock(tp);
+       if (locked == 0)
+               tty_unlock(tp);
 }
 
 static int
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to