[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3 15/29] x86/vvtd: Process interrupt remapping request
On Fri, Oct 20, 2017 at 01:16:37PM +0800, Chao Gao wrote: > On Thu, Oct 19, 2017 at 03:26:30PM +0100, Roger Pau Monné wrote: > >On Thu, Sep 21, 2017 at 11:01:56PM -0400, Lan Tianyu wrote: > >> +static void unmap_guest_page(void *virt) > >> +{ > >> + struct page_info *page; > >> + > >> + ASSERT((unsigned long)virt & PAGE_MASK); > > > >I'm not sure I get the point of the check above. > > I intended to check the address is 4K-page aligned. It should be > > ASSERT(!((unsigned long)virt & (PAGE_SIZE - 1))) Please use the IS_ALIGNED macro. > > > >> + } > >> + return; > >> +} > >> + > >> +static bool vvtd_irq_request_sanity_check(const struct vvtd *vvtd, > >> + struct > >> arch_irq_remapping_request *irq) > >> +{ > >> + if ( irq->type == VIOMMU_REQUEST_IRQ_APIC ) > >> + { > >> + struct IO_APIC_route_remap_entry rte = { .val = irq->msg.rte }; > >> + > >> + ASSERT(rte.format); > > > >Is it fine to ASSERT here? Can't the guest set rte.format to whatever > >it wants? > > Guest can use legacy format interrupt (i.e. rte.format = 0). However, > we only reach here when callback 'check_irq_remapping' return true and > for vvtd, 'check_irq_remapping' just returns the format bit of irq request. > If here ret.format isn't true, there must be a bug in our code. Are you sure the correct locks are hold here to prevent the guest from changing rte while all this processing is happening? > >> + vvtd_handle_fault(vvtd, irq, NULL, VTD_FR_IR_REQ_RSVD, > >> record_fault); > >> + return -EINVAL; > >> + } > >> + > >> + if ( entry > vvtd->status.irt_max_entry ) > >> + { > >> + vvtd_handle_fault(vvtd, irq, NULL, VTD_FR_IR_INDEX_OVER, > >> record_fault); > >> + return -EACCES; > >> + } > >> + > >> + irt_page = map_guest_page(vvtd->domain, > >> + vvtd->status.irt + (entry >> > >> IREMAP_ENTRY_ORDER)); > > > >Since AFAICT you have to read this page(s) every time an interrupt > >needs to be delivered, wouldn't it make sense for performance reasons > >to have the page permanently mapped? > > Yes. It is. Actually, we have a draft patch to do this. But to justify > the necessity, I should run some benchmark at first. Mapping a guest > page is slow on x86, right? The issue is the tblflush, not the actual modifications of the page tables. > > > >What's the maximum number of pages that can be used here? > > VT-d current support 2^16 entries at most. The size of each entry is 128 > byte. Thus, we need 2^11 pages at most. Those are guest pages at the end, so it shouldn't be a problem. Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |