El 10/12/14 a les 21.17, Justin T. Gibbs ha escrit: > On Dec 10, 2014, at 6:25 AM, Roger Pau MonnXX <roy...@freebsd.org> wrote: >> >> Author: royger >> Date: Wed Dec 10 13:25:21 2014 >> New Revision: 275679 >> URL: https://svnweb.freebsd.org/changeset/base/275679 >> >> Log: >> xen/intr: balance dynamic interrupts across available vCPUs >> >> By default Xen binds all event channels to vCPU#0, and FreeBSD only shuffles >> the interrupt sources once, at the end of the boot process. Since new event >> channels might be created after this point (because new devices or backends >> are added), try to automatically shuffle them at creation time. >> >> This does not affect VIRQ or IPI event channels, that are already bound to a >> specific vCPU as requested by the caller. >> >> Sponsored by: Citrix Systems R&D >> >> Modified: >> head/sys/x86/xen/xen_intr.c >> >> Modified: head/sys/x86/xen/xen_intr.c >> ============================================================================== >> --- head/sys/x86/xen/xen_intr.c Wed Dec 10 11:42:02 2014 >> (r275678) >> +++ head/sys/x86/xen/xen_intr.c Wed Dec 10 13:25:21 2014 >> (r275679) >> @@ -425,6 +425,17 @@ xen_intr_bind_isrc(struct xenisrc **isrc >> /* Assign the opaque handler (the event channel port) */ >> *port_handlep = &isrc->xi_port; >> >> +#ifdef SMP >> + if (type == EVTCHN_TYPE_PORT) { >> + /* >> + * By default all interrupts are assigned to vCPU#0 >> + * unless specified otherwise, so shuffle them to balance >> + * the interrupt load. >> + */ >> + xen_intr_assign_cpu(&isrc->xi_intsrc, intr_next_cpu()); >> + } >> +#endif >> + > > Shouldn't this only happen for new interrupt source objects, not those that > are being reclaimed/reused?
No, because the vCPU binding is done based on the event channel port, which changes when the event channel is allocated/setup. What I realize now is that I should probably have used intr_event_bind instead of directly calling xen_intr_assign_cpu, so that the ithread cpu mask is also correctly set. Roger. _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"