|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |