qemu-ppc
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]