intel-iommu: fault_reason index cleanup

Fix an off by one bug in the fault reason string reporting function, and
clean up some of the code around this buglet.

[akpm@linux-foundation.org: cleanup]
Signed-off-by: mark gross <mgross@linux.intel.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
mark gross 2008-02-08 04:18:39 -08:00 committed by Linus Torvalds
parent f8bab73515
commit d94afc6ccf
2 changed files with 6 additions and 7 deletions

View file

@ -745,7 +745,7 @@ static int iommu_disable_translation(struct intel_iommu *iommu)
/* iommu interrupt handling. Most stuff are MSI-like. */ /* iommu interrupt handling. Most stuff are MSI-like. */
static char *fault_reason_strings[] = static const char *fault_reason_strings[] =
{ {
"Software", "Software",
"Present bit in root entry is clear", "Present bit in root entry is clear",
@ -760,14 +760,13 @@ static char *fault_reason_strings[] =
"non-zero reserved fields in RTP", "non-zero reserved fields in RTP",
"non-zero reserved fields in CTP", "non-zero reserved fields in CTP",
"non-zero reserved fields in PTE", "non-zero reserved fields in PTE",
"Unknown"
}; };
#define MAX_FAULT_REASON_IDX (ARRAY_SIZE(fault_reason_strings) - 1) #define MAX_FAULT_REASON_IDX (ARRAY_SIZE(fault_reason_strings) - 1)
char *dmar_get_fault_reason(u8 fault_reason) const char *dmar_get_fault_reason(u8 fault_reason)
{ {
if (fault_reason >= MAX_FAULT_REASON_IDX) if (fault_reason > MAX_FAULT_REASON_IDX)
return fault_reason_strings[MAX_FAULT_REASON_IDX - 1]; return "Unknown";
else else
return fault_reason_strings[fault_reason]; return fault_reason_strings[fault_reason];
} }
@ -825,7 +824,7 @@ void dmar_msi_read(int irq, struct msi_msg *msg)
static int iommu_page_fault_do_one(struct intel_iommu *iommu, int type, static int iommu_page_fault_do_one(struct intel_iommu *iommu, int type,
u8 fault_reason, u16 source_id, u64 addr) u8 fault_reason, u16 source_id, u64 addr)
{ {
char *reason; const char *reason;
reason = dmar_get_fault_reason(fault_reason); reason = dmar_get_fault_reason(fault_reason);

View file

@ -28,7 +28,7 @@
#ifdef CONFIG_DMAR #ifdef CONFIG_DMAR
struct intel_iommu; struct intel_iommu;
extern char *dmar_get_fault_reason(u8 fault_reason); extern const char *dmar_get_fault_reason(u8 fault_reason);
/* Can't use the common MSI interrupt functions /* Can't use the common MSI interrupt functions
* since DMAR is not a pci device * since DMAR is not a pci device