Print this page
patch remove-dont-swap-flag

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/os/condvar.c
          +++ new/usr/src/uts/common/os/condvar.c
↓ open down ↓ 185 lines elided ↑ open up ↑
 186  186   * Block on the indicated condition variable and release the
 187  187   * associated kmutex while blocked.
 188  188   */
 189  189  void
 190  190  cv_wait(kcondvar_t *cvp, kmutex_t *mp)
 191  191  {
 192  192          if (panicstr)
 193  193                  return;
 194  194          ASSERT(!quiesce_active);
 195  195  
 196      -        ASSERT(curthread->t_schedflag & TS_DONT_SWAP);
 197  196          thread_lock(curthread);                 /* lock the thread */
 198  197          cv_block((condvar_impl_t *)cvp);
 199  198          thread_unlock_nopreempt(curthread);     /* unlock the waiters field */
 200  199          mutex_exit(mp);
 201  200          swtch();
 202  201          mutex_enter(mp);
 203  202  }
 204  203  
 205  204  static void
 206  205  cv_wakeup(void *arg)
↓ open down ↓ 112 lines elided ↑ open up ↑
 319  318           * Threads in system processes don't process signals.  This is
 320  319           * true both for standard threads of system processes and for
 321  320           * interrupt threads which have borrowed their pinned thread's LWP.
 322  321           */
 323  322          if (lwp == NULL || (p->p_flag & SSYS)) {
 324  323                  cv_wait(cvp, mp);
 325  324                  return (rval);
 326  325          }
 327  326          ASSERT(t->t_intr == NULL);
 328  327  
 329      -        ASSERT(curthread->t_schedflag & TS_DONT_SWAP);
 330  328          cancel_pending = schedctl_cancel_pending();
 331  329          lwp->lwp_asleep = 1;
 332  330          lwp->lwp_sysabort = 0;
 333  331          thread_lock(t);
 334  332          cv_block_sig(t, (condvar_impl_t *)cvp);
 335  333          thread_unlock_nopreempt(t);
 336  334          mutex_exit(mp);
 337  335          if (ISSIG(t, JUSTLOOKING) || MUSTRETURN(p, t) || cancel_pending)
 338  336                  setrun(t);
 339  337          /* ASSERT(no locks are held) */
↓ open down ↓ 207 lines elided ↑ open up ↑
 547  545                  return (rval);
 548  546          }
 549  547          ASSERT(t->t_intr == NULL);
 550  548  
 551  549          cancel_pending = schedctl_cancel_pending();
 552  550          lwp->lwp_asleep = 1;
 553  551          lwp->lwp_sysabort = 0;
 554  552          thread_lock(t);
 555  553          t->t_kpri_req = 0;      /* don't need kernel priority */
 556  554          cv_block_sig(t, (condvar_impl_t *)cvp);
 557      -        /* I can be swapped now */
 558      -        curthread->t_schedflag &= ~TS_DONT_SWAP;
 559  555          thread_unlock_nopreempt(t);
 560  556          mutex_exit(mp);
 561  557          if (ISSIG(t, JUSTLOOKING) || MUSTRETURN(p, t) || cancel_pending)
 562  558                  setrun(t);
 563  559          /* ASSERT(no locks are held) */
 564  560          swtch();
 565  561          signalled = (t->t_schedflag & TS_SIGNALLED);
 566  562          t->t_flag &= ~T_WAKEABLE;
 567      -        /* TS_DONT_SWAP set by disp() */
 568      -        ASSERT(curthread->t_schedflag & TS_DONT_SWAP);
 569  563          mutex_enter(mp);
 570  564          if (ISSIG_PENDING(t, lwp, p)) {
 571  565                  mutex_exit(mp);
 572  566                  if (issig(FORREAL))
 573  567                          rval = 0;
 574  568                  mutex_enter(mp);
 575  569          }
 576  570          if (lwp->lwp_sysabort || MUSTRETURN(p, t))
 577  571                  rval = 0;
 578  572          if (rval != 0 && cancel_pending) {
↓ open down ↓ 243 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX