]> xenbits.xensource.com Git - xen.git/commit
passthrough/vtd: Don't DMA to the stack in queue_invalidate_wait()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 19 Oct 2017 10:50:18 +0000 (11:50 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 24 Jul 2019 13:40:10 +0000 (14:40 +0100)
commit8970834eb95586d87b064e8c7fc49ee8d2875db4
treeca89fe65169a3293aee2978787880a1a748891e3
parent52fc4aaf1613e49d018bf3c5b1899b131ee2f417
passthrough/vtd: Don't DMA to the stack in queue_invalidate_wait()

DMA-ing to the stack is considered bad practice.  In this case, if a
timeout occurs because of a sluggish device which is processing the
request, the completion notification will corrupt the stack of a
subsequent deeper call tree.

Place the poll_slot in a percpu area and DMA to that instead.

Fix the declaration of saddr in struct qinval_entry, to avoid a shift by
two.  The requirement here is that the DMA address is dword aligned,
which is covered by poll_slot's type.

This change does not address other issues.  Correlating completions
after a timeout with their request is a more complicated change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <JBeulich@suse.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
xen/drivers/passthrough/vtd/iommu.h
xen/drivers/passthrough/vtd/qinval.c