cf619a92d2
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 |
||
---|---|---|
.. | ||
busdma_dmar.c | ||
busdma_dmar.h | ||
intel_ctx.c | ||
intel_dmar.h | ||
intel_drv.c | ||
intel_fault.c | ||
intel_gas.c | ||
intel_idpgtbl.c | ||
intel_intrmap.c | ||
intel_qi.c | ||
intel_quirks.c | ||
intel_reg.h | ||
intel_utils.c | ||
iommu_intrmap.h |