tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kpause()'s timeout value



Hi.

 I'm now working to reduce ixgbe's busy loop using with kpause()[*1].
I wrote the following code:

#define usec_delay(x) ixgbe_delay(x)
#define msec_delay(x) ixgbe_delay((x) * 1000)
void
ixgbe_delay(unsigned int us)
{

        if (__predict_false(cold))
                delay(us);
        else if ((us / 1000) >= hztoms(1))
                kpause("ixgdly", false, mstohz(us / 1000), NULL);
        else
                delay(us);
}

Does kpause(x, y, 1, z) guarantee to wait at least 1 tick length
of time? Or, does it wakeup the next tick? Should I add extra 1 tick
to kpause()?

man 9 "tsleep" says:
     timo      If non-zero, the process will sleep for at most timo/hz
               seconds.  If this amount of time elapses and no wakeup(ident)
               has occurred, and no signal (if PCATCH was set) was posted,
               tsleep() will return EWOULDBLOCK.

it sleep "at most timeo/hz" seconds. So some code use it like:

	tsleep(ident, priority, wmsg, 1 + 1);

to sleep AT LEAST 1 tick. Is this type of treatment required
on kpause()? man 9 kpause has no such note.

For example, usb_subr.c rev. 1.268's usb_delay_ms_locked() is as follows:
------------------------
void
usb_delay_ms_locked(struct usbd_bus *bus, u_int ms, kmutex_t *lock)
{
        /* Wait at least two clock ticks so we know the time has passed. */
        if (bus->ub_usepolling || cold)
                delay((ms+1) * 1000);
        else
                kpause("usbdly", false, (ms*hz+999)/1000 + 1, lock);
}
-------------------------
In the rev. 1.1. It was.
-------------------------
void
usbd_delay_ms(ms)
	int ms;
{
	/* Wait at least two clock ticks so we know the time has passed. */
	if (usbd_use_polling)
		delay((ms+1) * 1000);
	else
		tsleep(&ms, PRIBIO, "usbdly", (ms*hz+999)/1000 + 1);
}
-------------------------

If it's not required to add extra 1 tick on kpause(), usb_delay_ms_locked()
can be simplified.

[*1] http://www.netbsd.org/~msaitoh/ixgbe-sleep-20200618-0.dif

Thanks in advance.

-- 
-----------------------------------------------
                SAITOH Masanobu (msaitoh%execsw.org@localhost
                                 msaitoh%netbsd.org@localhost)


Home | Main Index | Thread Index | Old Index