freebsd-nq/sys/x86/iommu
Konstantin Belousov cf619a92d2 Fix batched unload for DMAR busdma in qi mode.
Do not queue dmar_map_entries with zeroed gseq to
dmar_qi_invalidate_locked().  Zero gseq stops the processing in the qi
task.  Do not assign possibly uninitialized on-stack gseq to map
entries when requeuing them on unit tlb_flush queue.  Random garbage
in gsec is interpreted as too high invalidation sequence number and
again stop the processing in the task.

Make the sequence numbers generation completely contained in
dmar_qi_invalidate_locked() and dmar_qi_emit_wait_seq().  Upper code
directly passes boolean requesting emiting wait command instead of
trying to provide hint to avoid it by passing NULL gseq pointer.

Microoptimize the requeueing to tlb_flush queue by doing it for the
whole queue.

Diagnosed and tested by:	Brett Gutstein <bgutstein@rice.edu>
Discussed with:	alc
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2017-06-19 21:48:52 +00:00
..
busdma_dmar.c Provide less laborius way to enable busdma DMAR to only short list of devices. 2017-03-26 00:40:35 +00:00
busdma_dmar.h
intel_ctx.c Fix batched unload for DMAR busdma in qi mode. 2017-06-19 21:48:52 +00:00
intel_dmar.h Fix batched unload for DMAR busdma in qi mode. 2017-06-19 21:48:52 +00:00
intel_drv.c Timeout DMAR commands. 2017-03-27 07:06:45 +00:00
intel_fault.c
intel_gas.c Correct calculation of the entry->free_down in the invariants-checking 2017-04-14 15:16:41 +00:00
intel_idpgtbl.c
intel_intrmap.c
intel_qi.c Fix batched unload for DMAR busdma in qi mode. 2017-06-19 21:48:52 +00:00
intel_quirks.c
intel_reg.h
intel_utils.c Timeout DMAR commands. 2017-03-27 07:06:45 +00:00
iommu_intrmap.h