Date: Wed, 20 Aug 2014 11:09:24 -0700 From: Neel Natu <neelnatu@gmail.com> To: John Baldwin <jhb@freebsd.org> Cc: "freebsd-xen@freebsd.org" <freebsd-xen@freebsd.org>, freebsd-drivers@freebsd.org, "freebsd-virtualization@freebsd.org" <freebsd-virtualization@freebsd.org> Subject: Re: Directly reserve an interrupt IDT entry for Hyper-V Message-ID: <CAFgRE9FQ3m1fHy_W-aVHgaGFceDr=A6O%2B2Nkrx58noaFLcR9fA@mail.gmail.com> In-Reply-To: <201408201131.29399.jhb@freebsd.org> References: <3defccd56bc0407c88bdda139b2462ac@BY1PR0301MB0902.namprd03.prod.outlook.com> <53F4A34A.4010807@citrix.com> <201408201131.29399.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi John, On Wed, Aug 20, 2014 at 8:31 AM, John Baldwin <jhb@freebsd.org> wrote: > On Wednesday, August 20, 2014 9:31:54 am Roger Pau Monn=C3=A9 wrote: >> On 20/08/14 11:19, Wei Hu wrote: >> > Hello, >> > >> > Sending to Xen, drivers and virtualization mailing lists since this mi= ght > be of interest to the folks on these aliases. >> > >> > I am working for Microsoft to improve the performance of FreeBSD runni= ng > on Hyper-V. Right now I am adding a feature in the vmbus driver which cou= ld > handle the host-guest channel communications on all vCPUs simultaneously.= In > order to achieve this, the hypervisor will send same interrupt concurrent= ly on > all the vCPUs. The traditional way on FreeBSD to set up interrupt handlin= g for > devicse, such as calling bus_alloc_resource() to reserve an IRQ line, and= then > calling bus_setup_intr() to create a vector, doesn't seem to work in this > case. It seems if the interrupt is routed via legacy IRQ, it can only be > active on one vCPU at a time. In order to allow the same interrupt to be > handled on all vCPUs concurrently, all I need is an IDT entry, not an IRQ > line. >> > >> > I checked current FreeBSD code. It looks to me Xen directly uses the > vector number IDT_EVTCHN (0x93) to achieve the same purpose. I am proposi= ng > both Xen and Hyper-V share this same vector. Following is a little bit de= tail > of my proposal for the changes in the current kernel. >> > >> > >> > 1. In machdep.c: >> > >> > #ifdef XENHVM >> > >> > setidt(IDT_EVTCHN, &IDTVEC(xen_intr_upcall), SDT_SYSIGT, SEL_U= PL, > 0); >> > >> > #else >> > >> > setidt(IDT_EVTCHN, &IDTVEC(hv_vmbus_intr), SDT_SYSIGT, SEL_UPL= , > 0); >> > >> > #endif >> > >> > 2. Apic_vector.S >> > >> > Add IDTVEC(hv_vmbus_intr) to call Hyper-V vmbus interrupt service rout= ine. >> > >> > Any thoughts, objections and feedbacks are all welcome. >> >> Hello, >> >> I don't think using the same IDT vector is the right approach, I would >> just pick a different IDT vector and use that for Hyper-V. Using the >> same IDT vector (like your suggestion above) would prevent shipping a >> kernel with with both Hyper-V and Xen support (like it's done now in >> GENERIC). >> >> Roger. > > Hmm, can't you make this a runtime check to only call setidt() if you det= ect > you are under the appropriate hypervisor? > > Also, bhyve currently has a hackish way of requesting a free IDT slot. > Perhaps it would be best if I added little API to reserve an IDT slot ass= uming > that callers could accept a dynamic IDT vector rather than a static one. > Yup, it'll be good to get rid of vmm_ipi.c. best Neel > -- > John Baldwin > _______________________________________________ > freebsd-virtualization@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization > To unsubscribe, send any mail to "freebsd-virtualization-unsubscribe@free= bsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFgRE9FQ3m1fHy_W-aVHgaGFceDr=A6O%2B2Nkrx58noaFLcR9fA>