[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [RFC PATCH 02/10] spapr_iommu: Disable in-ke
From: |
Alexey Kardashevskiy |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [RFC PATCH 02/10] spapr_iommu: Disable in-kernel IOMMU tables for >4GB windows |
Date: |
Tue, 12 Aug 2014 17:32:57 +1000 |
User-agent: |
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 |
On 08/12/2014 11:17 AM, David Gibson wrote:
> On Thu, Jul 31, 2014 at 07:34:06PM +1000, Alexey Kardashevskiy wrote:
>> The existing KVM_CREATE_SPAPR_TCE ioctl only support 4G windows max.
>> We are going to add huge DMA windows support so this will create small
>> window and unexpectedly fail later.
>
> I'm not entirely clear on what you're saying here. Are you saying
> that the kernel interface silently truncates a window > 4G, rather
> than failing?
>
> If so, that's a kernel bug which should be addressed - obviously we'd
> still need this as a workaround for older kernels, but it should be
> treated as a workaround, not as the real fix.
This is an RFC patchset and I have a KVM_CREATE_SPAPR_TCE_64 patch for
kernel but since we are still thinking whether to allocate these tables in
the userspace or not, I have not posted it.
>> This disables KVM_CREATE_SPAPR_TCE for windows bigger that 4GB. Since
>> those windows are normally mapped at the boot time, there will be no
>> performance impact.
>>
>> Signed-off-by: Alexey Kardashevskiy <address@hidden>
>> ---
>> hw/ppc/spapr_iommu.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
>> index f6e32a4..36f5d27 100644
>> --- a/hw/ppc/spapr_iommu.c
>> +++ b/hw/ppc/spapr_iommu.c
>> @@ -113,11 +113,11 @@ static MemoryRegionIOMMUOps spapr_iommu_ops = {
>> static int spapr_tce_table_realize(DeviceState *dev)
>> {
>> sPAPRTCETable *tcet = SPAPR_TCE_TABLE(dev);
>> + uint64_t window_size = tcet->nb_table << tcet->page_shift;
>>
>> - if (kvm_enabled()) {
>> + if (kvm_enabled() && !(window_size >> 32)) {
>> tcet->table = kvmppc_create_spapr_tce(tcet->liobn,
>> - tcet->nb_table <<
>> - tcet->page_shift,
>> + window_size,
>> &tcet->fd,
>> tcet->vfio_accel);
>> }
>
--
Alexey