[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 10/10] xen/arm: Process pending vPCI map/unmap operations



Hi, Julien!

On 13.10.21 18:30, Julien Grall wrote:
> Hi Oleksandr,
>
> On 08/10/2021 06:55, Oleksandr Andrushchenko wrote:
>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
>>
>> vPCI may map and unmap PCI device memory (BARs) being passed through which
>> may take a lot of time. For this those operations may be deferred to be
>> performed later, so that they can be safely preempted.
>>
>> Currently this deferred processing is happening in common IOREQ code
>> which doesn't seem to be the right place for x86 and is even more
>> doubtful because IOREQ may not be enabled for Arm at all.
>> So, for Arm the pending vPCI work may have no chance to be executed
>> if the processing is left as is in the common IOREQ code only.
>> For that reason make vPCI processing happen in arch specific code.
>>
>> Please be aware that there are a few outstanding TODOs affecting this
>> code path, see xen/drivers/vpci/header.c:map_range and
>> xen/drivers/vpci/header.c:vpci_process_pending.
>>
>> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
>> [x86 changes]
>> Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
>> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
>> Reviewed-by: Rahul Singh <rahul.singh@xxxxxxx>
>> Tested-by: Rahul Singh <rahul.singh@xxxxxxx>
>> ---
>> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
>> Cc: Paul Durrant <paul@xxxxxxx>
>>
>> Since v2:
>>   - update commit message with more insight on x86, IOREQ and Arm
>>   - restored order of invocation for IOREQ and vPCI processing (Jan)
>> Since v1:
>>   - Moved the check for pending vpci work from the common IOREQ code
>>     to hvm_do_resume on x86
>>   - Re-worked the code for Arm to ensure we don't miss pending vPCI work
>> ---
>>   xen/arch/arm/traps.c   | 13 +++++++++++++
>>   xen/arch/x86/hvm/hvm.c |  6 ++++++
>>   xen/common/ioreq.c     |  9 ---------
>>   3 files changed, 19 insertions(+), 9 deletions(-)
>>
>> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
>> index 219ab3c3fbde..b246f51086e3 100644
>> --- a/xen/arch/arm/traps.c
>> +++ b/xen/arch/arm/traps.c
>> @@ -34,6 +34,7 @@
>>   #include <xen/symbols.h>
>>   #include <xen/version.h>
>>   #include <xen/virtual_region.h>
>> +#include <xen/vpci.h>
>>     #include <public/sched.h>
>>   #include <public/xen.h>
>> @@ -2304,6 +2305,18 @@ static bool check_for_vcpu_work(void)
>>       }
>>   #endif
>>   +    if ( has_vpci(v->domain) )
>> +    {
>> +        bool pending;
>> +
>> +        local_irq_enable();
>> +        pending = vpci_process_pending(v);
>> +        local_irq_disable();
>> +
>> +        if ( pending )
>> +            return true;
>> +    }
>> +
>
> I would prefer if this addition is moved before the 
> vcpu_ioreq__handle_completion(v). This is to avoid differences with the x86 
> version.
Ok, will do

Thanks,
Oleksandr

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.