|
From: | Brijesh Singh |
Subject: | Re: [Qemu-devel] [PATCH 2/6] x86_iommu/amd: Prepare for interrupt remap support |
Date: | Wed, 12 Sep 2018 13:59:06 -0500 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 09/11/2018 10:52 PM, Peter Xu wrote:
On Tue, Sep 11, 2018 at 11:49:45AM -0500, Brijesh Singh wrote:static AddressSpace *amdvi_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) { AMDVIState *s = opaque; @@ -1055,6 +1151,12 @@ static AddressSpace *amdvi_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) address_space_init(&iommu_as[devfn]->as, MEMORY_REGION(&iommu_as[devfn]->iommu), "amd-iommu"); + memory_region_init_io(&iommu_as[devfn]->iommu_ir, OBJECT(s), + &amdvi_ir_ops, s, "amd-iommu-ir", + AMDVI_INT_ADDR_SIZE); + memory_region_add_subregion(MEMORY_REGION(&iommu_as[devfn]->iommu), + AMDVI_INT_ADDR_FIRST, + &iommu_as[devfn]->iommu_ir);A pure question: just to make sure this IR region won't be masked out by other memory regions. Asked since VT-d is explicitly setting a higher priority of the memory region for interrupts with memory_region_add_subregion_overlap().
Hmm, I was hoping that this IR region will not be masked out by other regions but if it does then we will have trouble. thanks for pointing this out, I think we can do similar thing as VT-d and make the region as high priority so that we get memops invoked.
} return &iommu_as[devfn]->as; } @@ -1172,6 +1274,10 @@ static void amdvi_realize(DeviceState *dev, Error **err) return; }+ /* Pseudo address space under root PCI bus. */+ pcms->ioapic_as = amdvi_host_dma_iommu(bus, s, AMDVI_SB_IOAPIC_ID); + s->intr_enabled = x86_iommu->intr_supported;So does this mean that AMD IR cannot be disabled if declared support? For VT-d, IR needs to be explicitly enabled otherwise disabled (even supported).
Yes, once its declared as supported then it can not disabled. Its upto the guest OS to decide whether it want to use the intr remapping feature by parsing the IVRS. This also brings question, should we just enable it by default because its guest OS decision whether it wants to use it or not.
[Prev in Thread] | Current Thread | [Next in Thread] |