On 25-Oct-01 Luigi Rizzo wrote: > I have some code (in stable) which is invoked from the idle > loop, see below. I was trying to port it to CURRENT, but > cannot find where the idle_loop (or idlethread ?) has gone. > Any pointers ? A grep for idlethread did not return > anything that i could parse. > > Furthermore, what kind of locking should i use instead of > splimp() (the procedures called by ether_input() are a > stripped down, bounded-execution-time version of the > interrupt service routines for ethernet adapters).
kern_idle.c. However, it cannot use any blocking locks if you invoke it from idle_loop(). You could also consider using a low priority kernel thread which is what the vm zeroing code does. So far the network stack is not locked, so leave the splimp's in as place holders and ensure your kthread acquires Giant around ether_poll(). > thanks > luigi > > --- i386/i386/swtch.s 2001/07/26 02:29:10 1.89.2.4 > +++ i386/i386/swtch.s 2001/10/23 04:00:27 > @@ -246,6 +246,15 @@ > call _procrunnable > testl %eax,%eax > CROSSJUMP(jnz, sw1a, jz) > +#ifdef XORP_ETHER_POLLING > + incl idle_done > + call ether_poll > + sti > + nop > + cli > + testl %eax, %eax > + jnz idle_loop > +#endif > call _vm_page_zero_idle > testl %eax, %eax > jnz idle_loop > > > --- i386/isa/intr_machdep.c 2001/08/24 17:39:12 1.29.2.3 > +++ i386/isa/intr_machdep.c 2001/10/24 02:03:55 > > int > +ether_poll(void) > +{ > + static int i; > + > + int s = splimp(); > + if (i >= pr_next) > + i = 0 ; > + if (pr[i].handler) > + (*pr[i].handler)(pr[i].argument, 2); > + i++ ; > + splx(s); > + return 1; /* more polling */ > +} > > > To Unsubscribe: send mail to [EMAIL PROTECTED] > with "unsubscribe freebsd-current" in the body of the message -- John Baldwin <[EMAIL PROTECTED]> -- http://www.FreeBSD.org/~jhb/ PGP Key: http://www.baldwin.cx/~john/pgpkey.asc "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message