svn commit: r347645 - head/sys/x86/iommu

Ryan Libby rlibby at FreeBSD.org
Thu May 16 04:24:10 UTC 2019


Author: rlibby
Date: Thu May 16 04:24:08 2019
New Revision: 347645
URL: https://svnweb.freebsd.org/changeset/base/347645

Log:
  iommu static analysis cleanup
  
  A static analyzer complained about a couple instances of checking a
  variable against NULL after already having dereferenced it.
   - dmar_gas_alloc_region: remove the tautological NULL checks
   - dmar_release_resources / dmar_fini_fault_log: don't deref unit->regs
     unless initialized.
  
  And while here, fix an inverted initialization check in dmar_fini_qi.
  
  Reviewed by:	kib
  Sponsored by:	Dell EMC Isilon
  Differential revision:	https://reviews.freebsd.org/D20263

Modified:
  head/sys/x86/iommu/intel_fault.c
  head/sys/x86/iommu/intel_gas.c
  head/sys/x86/iommu/intel_qi.c

Modified: head/sys/x86/iommu/intel_fault.c
==============================================================================
--- head/sys/x86/iommu/intel_fault.c	Thu May 16 03:30:36 2019	(r347644)
+++ head/sys/x86/iommu/intel_fault.c	Thu May 16 04:24:08 2019	(r347645)
@@ -291,12 +291,12 @@ void
 dmar_fini_fault_log(struct dmar_unit *unit)
 {
 
+	if (unit->fault_taskqueue == NULL)
+		return;
+
 	DMAR_LOCK(unit);
 	dmar_disable_fault_intr(unit);
 	DMAR_UNLOCK(unit);
-
-	if (unit->fault_taskqueue == NULL)
-		return;
 
 	taskqueue_drain(unit->fault_taskqueue, &unit->fault_task);
 	taskqueue_free(unit->fault_taskqueue);

Modified: head/sys/x86/iommu/intel_gas.c
==============================================================================
--- head/sys/x86/iommu/intel_gas.c	Thu May 16 03:30:36 2019	(r347644)
+++ head/sys/x86/iommu/intel_gas.c	Thu May 16 04:24:08 2019	(r347645)
@@ -546,7 +546,7 @@ dmar_gas_alloc_region(struct dmar_domain *domain, stru
 			return (EBUSY);
 		entry->start = prev->end;
 	}
-	if (next != NULL && next->start < entry->end &&
+	if (next->start < entry->end &&
 	    (next->flags & DMAR_MAP_ENTRY_PLACE) == 0) {
 		if ((next->flags & DMAR_MAP_ENTRY_RMRR) == 0)
 			return (EBUSY);
@@ -560,7 +560,7 @@ dmar_gas_alloc_region(struct dmar_domain *domain, stru
 		dmar_gas_rb_remove(domain, prev);
 		prev = NULL;
 	}
-	if (next != NULL && next->start < entry->end) {
+	if (next->start < entry->end) {
 		dmar_gas_rb_remove(domain, next);
 		next = NULL;
 	}

Modified: head/sys/x86/iommu/intel_qi.c
==============================================================================
--- head/sys/x86/iommu/intel_qi.c	Thu May 16 03:30:36 2019	(r347644)
+++ head/sys/x86/iommu/intel_qi.c	Thu May 16 04:24:08 2019	(r347645)
@@ -425,7 +425,7 @@ dmar_fini_qi(struct dmar_unit *unit)
 {
 	struct dmar_qi_genseq gseq;
 
-	if (unit->qi_enabled)
+	if (!unit->qi_enabled)
 		return;
 	taskqueue_drain(unit->qi_taskqueue, &unit->qi_task);
 	taskqueue_free(unit->qi_taskqueue);


More information about the svn-src-head mailing list