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

Re: [Xen-devel] [PATCH for-4.10] passthrough/vtd: Don't DMA to the stack in queue_invalidate_wait()



>>> On 19.10.17 at 13:26, <andrew.cooper3@xxxxxxxxxx> wrote:
> --- a/xen/drivers/passthrough/vtd/qinval.c
> +++ b/xen/drivers/passthrough/vtd/qinval.c
> @@ -147,7 +147,8 @@ static int __must_check queue_invalidate_wait(struct 
> iommu *iommu,
>                                                u8 iflag, u8 sw, u8 fn,
>                                                bool_t flush_dev_iotlb)
>  {
> -    volatile u32 poll_slot = QINVAL_STAT_INIT;

You've lost the initializer.

> +    static DEFINE_PER_CPU(u32, poll_slot);

volatile u32

> @@ -182,7 +183,7 @@ static int __must_check queue_invalidate_wait(struct 
> iommu *iommu,
>          timeout = NOW() + MILLISECS(flush_dev_iotlb ?
>                                      iommu_dev_iotlb_timeout : 
> VTD_QI_TIMEOUT);
>  
> -        while ( poll_slot != QINVAL_STAT_DONE )
> +        while ( *this_poll_slot != QINVAL_STAT_DONE )
>          {
>              if ( NOW() > timeout )
>              {

Okay, you indeed improve the situation. But is that improvement
enough? I.e. what if the write of a first (timed out) request happens
while waiting for a subsequent one? Don't you need distinct addresses
for every possible slot? Or alternatively isn't it high time for the
interrupt approach to be made work (perhaps not by you, but rather
by Intel folks)?

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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