Quoting sys/dev/vnd.c rev 1.62:

  1121  /*
  1122   * Wait interruptibly for an exclusive lock.
  1123   *
  1124   * XXX
  1125   * Several drivers do this; it should be abstracted and made MP-safe.
  1126   */
  1127  int
  1128  vndlock(sc)
  1129          struct vnd_softc *sc;
  1130  {
  1131          int error;
  1132  
  1133          while ((sc->sc_flags & VNF_LOCKED) != 0) {
  1134                  sc->sc_flags |= VNF_WANTED;
  1135                  if ((error = tsleep(sc, PRIBIO | PCATCH, "vndlck", 0)) 
!= 0)
  1136                          return (error);
  1137          }
  1138          sc->sc_flags |= VNF_LOCKED;
  1139          return (0);
  1140  }

Is it possible for a process to have the cpu taken away from it
between lines 1137 and 1138?

If so, is the comment "Several drivers do this" serious?

Reply via email to