Print this page
4823 don't open-code NSEC2MSEC and MSEC2NSEC


 733                 pollstate_t     *ps;
 734                 nfds_t          nfds;
 735                 int             fdcnt = 0;
 736                 hrtime_t        deadline = 0;
 737 
 738                 STRUCT_INIT(dvpoll, mode);
 739                 error = copyin((caddr_t)arg, STRUCT_BUF(dvpoll),
 740                     STRUCT_SIZE(dvpoll));
 741                 if (error) {
 742                         DP_REFRELE(dpep);
 743                         return (EFAULT);
 744                 }
 745 
 746                 deadline = STRUCT_FGET(dvpoll, dp_timeout);
 747                 if (deadline > 0) {
 748                         /*
 749                          * Convert the deadline from relative milliseconds
 750                          * to absolute nanoseconds.  They must wait for at
 751                          * least a tick.
 752                          */
 753                         deadline = deadline * NANOSEC / MILLISEC;
 754                         deadline = MAX(deadline, nsec_per_tick);
 755                         deadline += now;
 756                 }
 757 
 758                 if ((nfds = STRUCT_FGET(dvpoll, dp_nfds)) == 0) {
 759                         /*
 760                          * We are just using DP_POLL to sleep, so
 761                          * we don't any of the devpoll apparatus.
 762                          * Do not check for signals if we have a zero timeout.
 763                          */
 764                         DP_REFRELE(dpep);
 765                         if (deadline == 0)
 766                                 return (0);
 767                         mutex_enter(&curthread->t_delay_lock);
 768                         while ((error =
 769                             cv_timedwait_sig_hrtime(&curthread->t_delay_cv,
 770                             &curthread->t_delay_lock, deadline)) > 0)
 771                                 continue;
 772                         mutex_exit(&curthread->t_delay_lock);
 773                         return (error == 0 ? EINTR : 0);




 733                 pollstate_t     *ps;
 734                 nfds_t          nfds;
 735                 int             fdcnt = 0;
 736                 hrtime_t        deadline = 0;
 737 
 738                 STRUCT_INIT(dvpoll, mode);
 739                 error = copyin((caddr_t)arg, STRUCT_BUF(dvpoll),
 740                     STRUCT_SIZE(dvpoll));
 741                 if (error) {
 742                         DP_REFRELE(dpep);
 743                         return (EFAULT);
 744                 }
 745 
 746                 deadline = STRUCT_FGET(dvpoll, dp_timeout);
 747                 if (deadline > 0) {
 748                         /*
 749                          * Convert the deadline from relative milliseconds
 750                          * to absolute nanoseconds.  They must wait for at
 751                          * least a tick.
 752                          */
 753                         deadline = MSEC2NSEC(deadline);
 754                         deadline = MAX(deadline, nsec_per_tick);
 755                         deadline += now;
 756                 }
 757 
 758                 if ((nfds = STRUCT_FGET(dvpoll, dp_nfds)) == 0) {
 759                         /*
 760                          * We are just using DP_POLL to sleep, so
 761                          * we don't any of the devpoll apparatus.
 762                          * Do not check for signals if we have a zero timeout.
 763                          */
 764                         DP_REFRELE(dpep);
 765                         if (deadline == 0)
 766                                 return (0);
 767                         mutex_enter(&curthread->t_delay_lock);
 768                         while ((error =
 769                             cv_timedwait_sig_hrtime(&curthread->t_delay_cv,
 770                             &curthread->t_delay_lock, deadline)) > 0)
 771                                 continue;
 772                         mutex_exit(&curthread->t_delay_lock);
 773                         return (error == 0 ? EINTR : 0);