LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
@ 2014-12-22  9:15 Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
                   ` (12 more replies)
  0 siblings, 13 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

This patchset is an update of Bill Sumner's patchset, implements a fix for:
If a kernel boots with intel_iommu=on on a system that supports intel vt-d, 
when a panic happens, the kdump kernel will boot with these faults:

    dmar: DRHD: handling fault status reg 102
    dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
    DMAR:[fault reason 01] Present bit in root entry is clear

    dmar: DRHD: handling fault status reg 2
    dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
    INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear

On some system, the interrupt remapping fault will also happen even if the 
intel_iommu is not set to on, because the interrupt remapping will be enabled 
when x2apic is needed by the system.

The cause of the DMA fault is described in Bill's original version, and the 
INTR-Remap fault is caused by a similar reason. In short, the initialization 
of vt-d drivers causes the in-flight DMA and interrupt requests get wrong 
response.

To fix this problem, we modifies the behaviors of the intel vt-d in the 
crashdump kernel:

For DMA Remapping:
1. To accept the vt-d hardware in an active state,
2. Do not disable and re-enable the translation, keep it enabled.
3. Use the old root entry table, do not rewrite the RTA register.
4. Malloc and use new context entry table and page table, copy data from the 
   old ones that used by the old kernel.
5. to use different portions of the iova address ranges for the device drivers
   in the crashdump kernel than the iova ranges that were in-use at the time
   of the panic.  
6. After device driver is loaded, when it issues the first dma_map command, 
   free the dmar_domain structure for this device, and generate a new one, so 
   that the device can be assigned a new and empty page table. 
7. When a new context entry table is generated, we also save its address to 
   the old root entry table.

For Interrupt Remapping:
1. To accept the vt-d hardware in an active state,
2. Do not disable and re-enable the interrupt remapping, keep it enabled.
3. Use the old interrupt remapping table, do not rewrite the IRTA register.
4. When ioapic entry is setup, the interrupt remapping table is changed, and 
   the updated data will be stored to the old interrupt remapping table.

Advantages of this approach:
1. All manipulation of the IO-device is done by the Linux device-driver
   for that device.
2. This approach behaves in a manner very similar to operation without an
   active iommu.
3. Any activity between the IO-device and its RMRR areas is handled by the
   device-driver in the same manner as during a non-kdump boot.
4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
   This supports the practice of creating a special kdump kernel without
   drivers for any devices that are not required for taking a crashdump. 
5. Minimal code-changes among the existing mainline intel vt-d code.

Summary of changes in this patch set:
1. Added some useful function for root entry table in code intel-iommu.c
2. Added new members to struct root_entry and struct irte;
3. Functions to load old root entry table to iommu->root_entry from the memory 
   of old kernel.
4. Functions to malloc new context entry table and page table and copy the data
   from the old ones to the malloced new ones.
5. Functions to enable support for DMA remapping in kdump kernel.
6. Functions to load old irte data from the old kernel to the kdump kernel.
7. Some code changes that support other behaviours that have been listed.
8. In the new functions, use physical address as "unsigned long" type, not 
   pointers.

Original version by Bill Sumner:
    https://lkml.org/lkml/2014/1/10/518
    https://lkml.org/lkml/2014/4/15/716
    https://lkml.org/lkml/2014/4/24/836

Zhenhua's last of Bill's patchset:
    https://lkml.org/lkml/2014/10/21/134
    https://lkml.org/lkml/2014/12/15/121

Changed in this version:
1. Do not disable and re-enable traslation and interrupt remapping. 
2. Use old root entry table.
3. Use old interrupt remapping table.
4. Use "unsigned long" as physical address.
5. Use intel_unmap to unmap the old dma;

This patchset should be applied with this one together:
    https://lkml.org/lkml/2014/11/5/43
    x86/iommu: fix incorrect bit operations in setting values

Bill Sumner (5):
  iommu/vt-d: Update iommu_attach_domain() and its callers
  iommu/vt-d: Items required for kdump
  iommu/vt-d: data types and functions used for kdump
  iommu/vt-d: Add domain-id functions
  iommu/vt-d: enable kdump support in iommu module

Li, Zhen-Hua (10):
  iommu/vt-d: Update iommu_attach_domain() and its callers
  iommu/vt-d: Items required for kdump
  iommu/vt-d: Add domain-id functions
  iommu/vt-d: functions to copy data from old mem
  iommu/vt-d: Add functions to load and save old re
  iommu/vt-d: datatypes and functions used for kdump
  iommu/vt-d: enable kdump support in iommu module
  iommu/vtd: assign new page table for dma_map
  iommu/vt-d: Copy functions for irte
  iommu/vt-d: Use old irte in kdump kernel

 drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
 drivers/iommu/intel_irq_remapping.c |   99 +++-
 include/linux/intel-iommu.h         |   18 +
 3 files changed, 1123 insertions(+), 44 deletions(-)

-- 
2.0.0-rc0


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Allow specification of the domain-id for the new domain.
This patch only adds the 'did' parameter to iommu_attach_domain()
and modifies all of its callers to specify the default value of -1
which says "no did specified, allocate a new one".

This is no functional change from current behaviour -- just enables
a functional change to be made in a later patch.

Bill Sumner:
    Original version.

Li, Zhenhua:
    Minor change, add change to function __iommu_attach_domain.

Signed-off-by: Bill Sumner <billsumnerlinux@gmail.com>
Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 1232336..2dc6250 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -1534,31 +1534,36 @@ static struct dmar_domain *alloc_domain(int flags)
 }
 
 static int __iommu_attach_domain(struct dmar_domain *domain,
-				 struct intel_iommu *iommu)
+				 struct intel_iommu *iommu,
+				 int domain_number)
 {
 	int num;
 	unsigned long ndomains;
 
 	ndomains = cap_ndoms(iommu->cap);
-	num = find_first_zero_bit(iommu->domain_ids, ndomains);
-	if (num < ndomains) {
-		set_bit(num, iommu->domain_ids);
-		iommu->domains[num] = domain;
-	} else {
-		num = -ENOSPC;
-	}
+	if (domain_number < 0) {
+		num = find_first_zero_bit(iommu->domain_ids, ndomains);
+		if (num < ndomains) {
+			set_bit(num, iommu->domain_ids);
+			iommu->domains[num] = domain;
+		} else {
+			num = -ENOSPC;
+		}
+	} else
+		num = domain_number;
 
 	return num;
 }
 
 static int iommu_attach_domain(struct dmar_domain *domain,
-			       struct intel_iommu *iommu)
+			       struct intel_iommu *iommu,
+			       int domain_number)
 {
 	int num;
 	unsigned long flags;
 
 	spin_lock_irqsave(&iommu->lock, flags);
-	num = __iommu_attach_domain(domain, iommu);
+	num = __iommu_attach_domain(domain, iommu, domain_number);
 	spin_unlock_irqrestore(&iommu->lock, flags);
 	if (num < 0)
 		pr_err("IOMMU: no free domain ids\n");
@@ -1577,7 +1582,7 @@ static int iommu_attach_vm_domain(struct dmar_domain *domain,
 		if (iommu->domains[num] == domain)
 			return num;
 
-	return __iommu_attach_domain(domain, iommu);
+	return __iommu_attach_domain(domain, iommu, -1);
 }
 
 static void iommu_detach_domain(struct dmar_domain *domain,
@@ -2231,6 +2236,7 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
 	u16 dma_alias;
 	unsigned long flags;
 	u8 bus, devfn;
+	int did = -1;   /* Default to "no domain_id supplied" */
 
 	domain = find_domain(dev);
 	if (domain)
@@ -2264,7 +2270,7 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
 	domain = alloc_domain(0);
 	if (!domain)
 		return NULL;
-	domain->id = iommu_attach_domain(domain, iommu);
+	domain->id = iommu_attach_domain(domain, iommu, did);
 	if (domain->id < 0) {
 		free_domain_mem(domain);
 		return NULL;
@@ -2442,7 +2448,7 @@ static int __init si_domain_init(int hw)
 		return -EFAULT;
 
 	for_each_active_iommu(iommu, drhd) {
-		ret = iommu_attach_domain(si_domain, iommu);
+		ret = iommu_attach_domain(si_domain, iommu, -1);
 		if (ret < 0) {
 			domain_exit(si_domain);
 			return -EFAULT;
@@ -3866,7 +3872,7 @@ static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
 	iommu_enable_translation(iommu);
 
 	if (si_domain) {
-		ret = iommu_attach_domain(si_domain, iommu);
+		ret = iommu_attach_domain(si_domain, iommu, -1);
 		if (ret < 0 || si_domain->id != ret)
 			goto disable_iommu;
 		domain_attach_iommu(si_domain, iommu);
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 02/10] iommu/vt-d: Items required for kdump
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 03/10] iommu/vt-d: Add domain-id functions Li, Zhen-Hua
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Add structure type domain_values_entry used for kdump;
Add context entry functions needed for kdump.

Bill Sumner:
    Original version;

Li, Zhenhua:
    Changed the name of new functions, make them consistent with current
    context get/set functions.

Signed-off-by: Bill Sumner <billsumnerlinux@gmail.com>
Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 70 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 2dc6250..5ce2850 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -40,6 +40,7 @@
 #include <linux/pci-ats.h>
 #include <linux/memblock.h>
 #include <linux/dma-contiguous.h>
+#include <linux/crash_dump.h>
 #include <asm/irq_remapping.h>
 #include <asm/cacheflush.h>
 #include <asm/iommu.h>
@@ -208,6 +209,12 @@ get_context_addr_from_root(struct root_entry *root)
 		NULL);
 }
 
+static inline unsigned long
+get_context_phys_from_root(struct root_entry *root)
+{
+	return  root_present(root) ? (root->val & VTD_PAGE_MASK) : 0;
+}
+
 /*
  * low 64 bits:
  * 0: present
@@ -228,6 +235,32 @@ static inline bool context_present(struct context_entry *context)
 {
 	return (context->lo & 1);
 }
+
+static inline int context_fault_enable(struct context_entry *c)
+{
+	return((c->lo >> 1) & 0x1);
+}
+
+static inline int context_translation_type(struct context_entry *c)
+{
+	return((c->lo >> 2) & 0x3);
+}
+
+static inline u64 context_address_root(struct context_entry *c)
+{
+	return((c->lo >> VTD_PAGE_SHIFT));
+}
+
+static inline int context_address_width(struct context_entry *c)
+{
+	return((c->hi >> 0) & 0x7);
+}
+
+static inline int context_domain_id(struct context_entry *c)
+{
+	return((c->hi >> 8) & 0xffff);
+}
+
 static inline void context_set_present(struct context_entry *context)
 {
 	context->lo |= 1;
@@ -313,6 +346,43 @@ static inline int first_pte_in_page(struct dma_pte *pte)
 	return !((unsigned long)pte & ~VTD_PAGE_MASK);
 }
 
+
+#ifdef CONFIG_CRASH_DUMP
+
+/*
+ * Fix Crashdump failure caused by leftover DMA through a hardware IOMMU
+ *
+ * Fixes the crashdump kernel to deal with an active iommu and legacy
+ * DMA from the (old) panicked kernel in a manner similar to how legacy
+ * DMA is handled when no hardware iommu was in use by the old kernel --
+ * allow the legacy DMA to continue into its current buffers.
+ *
+ * In the crashdump kernel, this code:
+ * 1. skips disabling the IOMMU's translating of IO Virtual Addresses (IOVA).
+ * 2. Do not re-enable IOMMU's translating.
+ * 3. In kdump kernel, use the old root entry table.
+ * 4. Leaves the current translations in-place so that legacy DMA will
+ *    continue to use its current buffers.
+ * 5. Allocates to the device drivers in the crashdump kernel
+ *    portions of the iova address ranges that are different
+ *    from the iova address ranges that were being used by the old kernel
+ *    at the time of the panic.
+ *
+ */
+
+struct domain_values_entry {
+	struct list_head link;		/* link entries into a list */
+	struct iova_domain iovad;	/* iova's that belong to this domain */
+	struct dma_pte	*pgd;		/* virtual address */
+	int    did;			/* domain id */
+	int    gaw;			/* max guest address width */
+	int    iommu_superpage;		/* Level of superpages supported:
+					   0 == 4KiB (no superpages), 1 == 2MiB,
+					   2 == 1GiB, 3 == 512GiB, 4 == 1TiB */
+};
+
+#endif /* CONFIG_CRASH_DUMP */
+
 /*
  * This domain is a statically identity mapping domain.
  *	1. This domain creats a static 1:1 mapping to all usable memory.
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 03/10] iommu/vt-d: Add domain-id functions
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Interfaces for when a new domain in the crashdump kernel needs some
values from the panicked kernel's context entries.

Signed-off-by: Bill Sumner <billsumnerlinux@gmail.com>
---
 drivers/iommu/intel-iommu.c | 62 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 5ce2850..c0bebd6 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -381,6 +381,13 @@ struct domain_values_entry {
 					   2 == 1GiB, 3 == 512GiB, 4 == 1TiB */
 };
 
+static struct domain_values_entry *intel_iommu_did_to_domain_values_entry(
+		int did, struct intel_iommu *iommu);
+
+static int intel_iommu_get_dids_from_old_kernel(struct intel_iommu *iommu);
+
+static int device_to_domain_id(struct intel_iommu *iommu, u8 bus, u8 devfn);
+
 #endif /* CONFIG_CRASH_DUMP */
 
 /*
@@ -4832,3 +4839,58 @@ static void __init check_tylersburg_isoch(void)
 	printk(KERN_WARNING "DMAR: Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n",
 	       vtisochctrl);
 }
+
+#ifdef CONFIG_CRASH_DUMP
+
+/*
+ * Interfaces for when a new domain in the crashdump kernel needs some
+ * values from the panicked kernel's context entries
+ *
+ */
+static struct domain_values_entry *intel_iommu_did_to_domain_values_entry(
+		int did, struct intel_iommu *iommu)
+{
+	struct domain_values_entry *dve;	/* iterator */
+
+	list_for_each_entry(dve, &domain_values_list[iommu->seq_id], link)
+		if (dve->did == did)
+			return dve;
+	return NULL;
+}
+
+/* Mark domain-id's from old kernel as in-use on this iommu so that a new
+ * domain-id is allocated in the case where there is a device in the new kernel
+ * that was not in the old kernel -- and therefore a new domain-id is needed.
+ */
+static int intel_iommu_get_dids_from_old_kernel(struct intel_iommu *iommu)
+{
+	struct domain_values_entry *dve;	/* iterator */
+
+	pr_info("IOMMU:%d Domain ids from panicked kernel:\n", iommu->seq_id);
+
+	list_for_each_entry(dve, &domain_values_list[iommu->seq_id], link) {
+		set_bit(dve->did, iommu->domain_ids);
+		pr_info("DID did:%d(0x%4.4x)\n", dve->did, dve->did);
+	}
+
+	pr_info("----------------------------------------\n");
+	return 0;
+}
+
+static int device_to_domain_id(struct intel_iommu *iommu, u8 bus, u8 devfn)
+{
+	int did = -1;			/* domain-id returned */
+	struct root_entry *root;
+	struct context_entry *context;
+	unsigned long flags;
+
+	spin_lock_irqsave(&iommu->lock, flags);
+	root = &iommu->root_entry[bus];
+	context = get_context_addr_from_root(root);
+	if (context && context_present(context+devfn))
+		did = context_domain_id(context+devfn);
+	spin_unlock_irqrestore(&iommu->lock, flags);
+	return did;
+}
+
+#endif /* CONFIG_CRASH_DUMP */
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 04/10] iommu/vt-d: functions to copy data from old mem
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (2 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 03/10] iommu/vt-d: Add domain-id functions Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 05/10] iommu/vt-d: Add functions to load and save old re Li, Zhen-Hua
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Add some functions to copy the data from old kernel.
These functions are used to copy context tables and page tables.

To avoid calling iounmap between spin_lock_irqsave and spin_unlock_irqrestore,
use a link here, store the pointers , and then use iounmap to free them in
another place.

Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 97 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/intel-iommu.h |  9 +++++
 2 files changed, 106 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index c0bebd6..8a7ad72 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -388,6 +388,13 @@ static int intel_iommu_get_dids_from_old_kernel(struct intel_iommu *iommu);
 
 static int device_to_domain_id(struct intel_iommu *iommu, u8 bus, u8 devfn);
 
+struct iommu_remapped_entry {
+	struct list_head list;
+	void __iomem *mem;
+};
+static LIST_HEAD(__iommu_remapped_mem);
+static DEFINE_MUTEX(__iommu_mem_list_lock);
+
 #endif /* CONFIG_CRASH_DUMP */
 
 /*
@@ -4843,6 +4850,96 @@ static void __init check_tylersburg_isoch(void)
 #ifdef CONFIG_CRASH_DUMP
 
 /*
+ * Copy memory from a physically-addressed area into a virtually-addressed area
+ */
+int __iommu_load_from_oldmem(void *to, unsigned long from, unsigned long size)
+{
+	unsigned long pfn;		/* Page Frame Number */
+	size_t csize = (size_t)size;	/* Num(bytes to copy) */
+	unsigned long offset;		/* Lower 12 bits of to */
+	void __iomem *virt_mem;
+	struct iommu_remapped_entry *mapped;
+
+	pfn = from >> VTD_PAGE_SHIFT;
+	offset = from & (~VTD_PAGE_MASK);
+
+	if (page_is_ram(pfn)) {
+		memcpy(to, pfn_to_kaddr(pfn) + offset, csize);
+	} else{
+
+		mapped = kzalloc(sizeof(struct iommu_remapped_entry),
+				GFP_KERNEL);
+		if (!mapped)
+			return -ENOMEM;
+
+		virt_mem = ioremap_cache((unsigned long)from, size);
+		if (!virt_mem) {
+			kfree(mapped);
+			return -ENOMEM;
+		}
+		memcpy(to, virt_mem, size);
+
+		mutex_lock(&__iommu_mem_list_lock);
+		mapped->mem = virt_mem;
+		list_add_tail(&mapped->list, &__iommu_remapped_mem);
+		mutex_unlock(&__iommu_mem_list_lock);
+	}
+	return size;
+}
+
+/*
+ * Copy memory from a virtually-addressed area into a physically-addressed area
+ */
+int __iommu_save_to_oldmem(unsigned long to, void *from, unsigned long size)
+{
+	unsigned long pfn;		/* Page Frame Number */
+	size_t csize = (size_t)size;	/* Num(bytes to copy) */
+	unsigned long offset;		/* Lower 12 bits of to */
+	void __iomem *virt_mem;
+	struct iommu_remapped_entry *mapped;
+
+	pfn = to >> VTD_PAGE_SHIFT;
+	offset = to & (~VTD_PAGE_MASK);
+
+	if (page_is_ram(pfn)) {
+		memcpy(pfn_to_kaddr(pfn) + offset, from, csize);
+	} else{
+		mapped = kzalloc(sizeof(struct iommu_remapped_entry),
+				GFP_KERNEL);
+		if (!mapped)
+			return -ENOMEM;
+
+		virt_mem = ioremap_cache((unsigned long)to, size);
+		if (!virt_mem) {
+			kfree(mapped);
+			return -ENOMEM;
+		}
+		memcpy(virt_mem, from, size);
+		mutex_lock(&__iommu_mem_list_lock);
+		mapped->mem = virt_mem;
+		list_add_tail(&mapped->list, &__iommu_remapped_mem);
+		mutex_unlock(&__iommu_mem_list_lock);
+	}
+	return size;
+}
+
+/*
+ * Free the mapped memory for ioremap;
+ */
+int __iommu_free_mapped_mem(void)
+{
+	struct iommu_remapped_entry *mem_entry, *tmp;
+
+	mutex_lock(&__iommu_mem_list_lock);
+	list_for_each_entry_safe(mem_entry, tmp, &__iommu_remapped_mem, list) {
+		iounmap(mem_entry->mem);
+		list_del(&mem_entry->list);
+		kfree(mem_entry);
+	}
+	mutex_unlock(&__iommu_mem_list_lock);
+	return 0;
+}
+/*
  * Interfaces for when a new domain in the crashdump kernel needs some
  * values from the panicked kernel's context entries
  *
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index a65208a..8ffa523 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -26,6 +26,7 @@
 #include <linux/iova.h>
 #include <linux/io.h>
 #include <linux/dma_remapping.h>
+#include <linux/crash_dump.h>
 #include <asm/cacheflush.h>
 #include <asm/iommu.h>
 
@@ -368,4 +369,12 @@ extern int dmar_ir_support(void);
 
 extern const struct attribute_group *intel_iommu_groups[];
 
+#ifdef CONFIG_CRASH_DUMP
+extern int __iommu_load_from_oldmem(void *to, unsigned long from,
+					unsigned long size);
+extern int __iommu_save_to_oldmem(unsigned long to, void *from,
+					unsigned long size);
+extern int __iommu_free_mapped_mem(void);
+#endif /* CONFIG_CRASH_DUMP */
+
 #endif
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 05/10] iommu/vt-d: Add functions to load and save old re
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (3 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Add functions to load root entry table from old kernel, and to save updated
root entry table.
Add two member in struct intel_iommu, to store the RTA in old kernel, and
the mapped virt address of it.

We use the old RTA in dump kernel, and when the iommu->root_entry is used as
a cache in kdump kernel, its phys address will not be save to RTA register,
but when its data is changed, we will save the new data to old root entry table.

Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 49 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/intel-iommu.h |  5 +++++
 2 files changed, 54 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 8a7ad72..126294db 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -388,6 +388,10 @@ static int intel_iommu_get_dids_from_old_kernel(struct intel_iommu *iommu);
 
 static int device_to_domain_id(struct intel_iommu *iommu, u8 bus, u8 devfn);
 
+static void __iommu_load_old_root_entry(struct intel_iommu *iommu);
+
+static void __iommu_update_old_root_entry(struct intel_iommu *iommu, int index);
+
 struct iommu_remapped_entry {
 	struct list_head list;
 	void __iomem *mem;
@@ -4990,4 +4994,49 @@ static int device_to_domain_id(struct intel_iommu *iommu, u8 bus, u8 devfn)
 	return did;
 }
 
+/*
+ * Load the old root entry table to new root entry table.
+ */
+static void __iommu_load_old_root_entry(struct intel_iommu *iommu)
+{
+	if ((!iommu)
+		|| (!iommu->root_entry)
+		|| (!iommu->root_entry_old_virt)
+		|| (!iommu->root_entry_old_phys))
+		return;
+	memcpy(iommu->root_entry, iommu->root_entry_old_virt, PAGE_SIZE);
+}
+
+/*
+ * When the data in new root entry table is changed, this function
+ * must be called to save the updated data to old root entry table.
+ */
+static void __iommu_update_old_root_entry(struct intel_iommu *iommu, int index)
+{
+	u8 start;
+	unsigned long size;
+	void __iomem *to;
+	void *from;
+
+	if ((!iommu)
+		|| (!iommu->root_entry)
+		|| (!iommu->root_entry_old_virt)
+		|| (!iommu->root_entry_old_phys))
+		return;
+
+	if (index < -1 || index >= ROOT_ENTRY_NR)
+		return;
+
+	if (index == -1) {
+		start = 0;
+		size = ROOT_ENTRY_NR * sizeof(struct root_entry);
+	} else {
+		start = index * sizeof(struct root_entry);
+		size = sizeof(struct root_entry);
+	}
+	to = iommu->root_entry_old_virt;
+	from = iommu->root_entry;
+	memcpy(to + start, from + start, size);
+}
+
 #endif /* CONFIG_CRASH_DUMP */
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index 8ffa523..8e29b97 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -329,6 +329,11 @@ struct intel_iommu {
 	spinlock_t	lock; /* protect context, domain ids */
 	struct root_entry *root_entry; /* virtual address */
 
+#ifdef CONFIG_CRASH_DUMP
+	void __iomem *root_entry_old_virt; /* mapped from old root entry */
+	unsigned long root_entry_old_phys; /* root entry in old kernel */
+#endif
+
 	struct iommu_flush flush;
 #endif
 	struct q_inval  *qi;            /* Queued invalidation info */
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 06/10] iommu/vt-d: datatypes and functions used for kdump
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (4 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 05/10] iommu/vt-d: Add functions to load and save old re Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Populate it with support functions to copy iommu translation tables from
from the panicked kernel into the kdump kernel in the event of a crash.

Functions:
    malloc new context table and copy old context table to the new one.
    malloc new page table and copy old page table to the new one.

Bill Sumner:
    Original version, the creation of the data types and functions.

Li, Zhenhua:
    Minor change:
    Update the usage of context_get_* and context_put*, use context_*
    and context_set_* for replacement.
    Update the name of the function that copies root entry table.
    Use new function to copy old context entry tables and page tables.
    Use "unsigned long" for physical address.
    Change incorrect aw_shift[4] and a few comments in copy_context_entry().

Signed-off-by: Bill Sumner <billsumnerlinux@gmail.com>
Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 540 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 540 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 126294db..f9849cb 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -399,6 +399,62 @@ struct iommu_remapped_entry {
 static LIST_HEAD(__iommu_remapped_mem);
 static DEFINE_MUTEX(__iommu_mem_list_lock);
 
+/* ========================================================================
+ * Copy iommu translation tables from old kernel into new  kernel.
+ * Entry to this set of functions is: intel_iommu_load_translation_tables()
+ * ------------------------------------------------------------------------
+ */
+
+/*
+ * Lists of domain_values_entry to hold domain values found during the copy.
+ * One list for each iommu in g_number_of_iommus.
+ */
+static struct list_head *domain_values_list;
+
+
+#define RET_BADCOPY -1	/* Return-code: Cannot copy translate tables */
+
+/*
+ * Struct copy_page_addr_parms is used to allow copy_page_addr()
+ * to accumulate values across multiple calls and returns.
+ */
+struct copy_page_addr_parms {
+	u32 first;	/* flag: first-time  */
+	u32 last;	/* flag: last-time */
+	u32 bus;	/* last bus number we saw */
+	u32 devfn;	/* last devfn we saw */
+	u32 shift;	/* last shift we saw */
+	u64 pte;	/* Page Table Entry */
+	u64 next_addr;	/* next-expected page_addr */
+
+	u64 page_addr;	/* page_addr accumulating size */
+	u64 page_size;	/* page_size accumulated */
+
+	struct domain_values_entry *dve;	/* to accumulate iova ranges */
+};
+
+enum returns_from_copy_context_entry {
+RET_CCE_NOT_PRESENT = 1,
+RET_CCE_NEW_PAGE_TABLES,
+RET_CCE_PASS_THROUGH_1,
+RET_CCE_PASS_THROUGH_2,
+RET_CCE_RESERVED_VALUE,
+RET_CCE_PREVIOUS_DID
+};
+
+static int copy_context_entry(struct intel_iommu *iommu, u32 bus, u32 devfn,
+			      void *ppap, struct context_entry *ce);
+
+static int copy_context_entry_table(struct intel_iommu *iommu,
+				    u32 bus, void *ppap,
+				    unsigned long *context_new_p,
+				    unsigned long context_old_phys);
+
+static int copy_root_entry_table(struct intel_iommu *iommu, void *ppap);
+
+static int intel_iommu_load_translation_tables(struct dmar_drhd_unit *drhd,
+		int g_num_of_iommus);
+
 #endif /* CONFIG_CRASH_DUMP */
 
 /*
@@ -5039,4 +5095,488 @@ static void __iommu_update_old_root_entry(struct intel_iommu *iommu, int index)
 	memcpy(to + start, from + start, size);
 }
 
+/*
+ * constant for initializing instances of copy_page_addr_parms properly.
+ */
+static struct copy_page_addr_parms copy_page_addr_parms_init = {1, 0};
+
+
+
+/*
+ * Lowest-level function in the 'Copy Page Tables' set
+ * Called once for each page_addr present in an iommu page-address table.
+ *
+ * Because of the depth-first traversal of the page-tables by the
+ * higher-level functions that call 'copy_page_addr', all pages
+ * of a domain will be presented in ascending order of IO Virtual Address.
+ *
+ * This function accumulates each contiguous range of these IOVAs and
+ * reserves it within the proper domain in the crashdump kernel when a
+ * non-contiguous range is detected, as determined by any of the following:
+ * 1. a change in the bus or device owning the presented page
+ * 2. a change in the page-size of the presented page (parameter shift)
+ * 3. a change in the page-table entry of the presented page
+ * 4. a presented IOVA that does not match the expected next-page address
+ * 5. the 'last' flag is set, indicating that all IOVAs have been seen.
+ */
+static int copy_page_addr(u64 page_addr, u32 shift, u32 bus, u32 devfn,
+				u64 pte, struct domain_values_entry *dve,
+				void *parms)
+{
+	struct copy_page_addr_parms *ppap = parms;
+
+	u64 page_size = ((u64)1 << shift);	/* page_size */
+	u64 pfn_lo;				/* For reserving IOVA range */
+	u64 pfn_hi;				/* For reserving IOVA range */
+	struct iova *iova_p;			/* For reserving IOVA range */
+
+	if (!ppap) {
+		pr_err("ERROR: ppap is NULL: 0x%3.3x(%3.3d) DevFn: 0x%3.3x(%3.3d) Page: 0x%16.16llx Size: 0x%16.16llx(%lld)\n",
+			bus, bus, devfn, devfn,  page_addr,
+			page_size, page_size);
+		return 0;
+	}
+
+	/* If (only extending current addr range) */
+	if (ppap->first     == 0      &&
+	    ppap->last      == 0      &&
+	    ppap->bus       == bus    &&
+	    ppap->devfn     == devfn  &&
+	    ppap->shift     == shift  &&
+	    (ppap->pte & ~VTD_PAGE_MASK) == (pte & ~VTD_PAGE_MASK) &&
+	    ppap->next_addr == page_addr) {
+
+		/* Update page size and next-expected address */
+		ppap->next_addr += page_size;
+		ppap->page_size += page_size;
+		return 0;
+	}
+
+	if (!ppap->first) {
+		/* Close-out the accumulated IOVA address range */
+
+		if (!ppap->dve) {
+			pr_err("%s ERROR: ppap->dve is NULL -- needed to reserve range for B:D:F=%2.2x:%2.2x:%1.1x\n",
+				__func__,
+				ppap->bus, ppap->devfn >> 3, ppap->devfn & 0x7);
+			return RET_BADCOPY;
+		}
+		pfn_lo = IOVA_PFN(ppap->page_addr);
+		pfn_hi = IOVA_PFN(ppap->page_addr + ppap->page_size);
+		iova_p = reserve_iova(&ppap->dve->iovad, pfn_lo, pfn_hi);
+	}
+
+	/* Prepare for a new IOVA address range */
+	ppap->first     = 0;		/* Not first-time anymore */
+	ppap->bus       = bus;
+	ppap->devfn     = devfn;
+	ppap->shift     = shift;
+	ppap->pte       = pte;
+	ppap->next_addr = page_addr + page_size; /* Next-expected page_addr */
+
+	ppap->page_addr = page_addr;	/* Addr(new page) */
+	ppap->page_size = page_size;	/* Size(new page) */
+
+	ppap->dve	= dve;	/* adr(device_values_entry for new range) */
+
+	return 0;
+}
+
+/*
+ * Recursive function to copy the tree of page tables (max 6 recursions)
+ * Parameter 'shift' controls the recursion
+ */
+static int copy_page_table(unsigned long *dma_pte_new_p,
+			   unsigned long dma_pte_phys,
+			   u32 shift, u64 page_addr,
+			   struct intel_iommu *iommu,
+			   u32 bus, u32 devfn,
+			   struct domain_values_entry *dve, void *ppap)
+{
+	int ret;			/* Integer return code */
+	struct dma_pte *p;		/* Virtual adr(each entry) iterator */
+	struct dma_pte *pgt_new_virt;	/* Adr(dma_pte in new kernel) */
+	unsigned long dma_pte_next;	/* Adr(next table down)  */
+	u64 u;				/* index(each entry in page_table) */
+
+
+	/* If (already done all levels -- problem) */
+	if (shift < 12) {
+		pr_err("ERROR %s shift < 12 %lx\n", __func__, dma_pte_phys);
+		pr_err("shift %d, page_addr %16.16llu bus %3.3u devfn %3.3u\n",
+			shift, page_addr, bus, devfn);
+		return RET_BADCOPY;
+	}
+
+	/* allocate a page table in the new kernel
+	 * copy contents from old kernel
+	 * then update each entry in the table in the new kernel
+	 */
+
+	pgt_new_virt = (struct dma_pte *)alloc_pgtable_page(iommu->node);
+	if (!pgt_new_virt)
+		return -ENOMEM;
+
+	ret = __iommu_load_from_oldmem(pgt_new_virt,
+					dma_pte_phys,
+					VTD_PAGE_SIZE);
+
+	if (ret <= 0)
+		return ret;
+
+	for (u = 0, p = pgt_new_virt; u < 512; u++, p++) {
+
+		if (((p->val & DMA_PTE_READ) == 0) &&
+		    ((p->val & DMA_PTE_WRITE) == 0))
+			continue;
+
+		if (dma_pte_superpage(p) || (shift == 12)) {
+
+			ret = copy_page_addr(page_addr | (u << shift),
+				shift, bus, devfn, p->val, dve, ppap);
+			if (ret)
+				return ret;
+			continue;
+		}
+
+		ret = copy_page_table(&dma_pte_next,
+				(p->val & VTD_PAGE_MASK),
+				shift-9, page_addr | (u << shift),
+				iommu, bus, devfn, dve, ppap);
+		if (ret)
+			return ret;
+
+		p->val &= ~VTD_PAGE_MASK;	/* Clear old and set new pgd */
+		p->val |= ((u64)dma_pte_next & VTD_PAGE_MASK);
+	}
+
+	*dma_pte_new_p = virt_to_phys(pgt_new_virt);
+	__iommu_flush_cache(iommu, pgt_new_virt, VTD_PAGE_SIZE);
+
+	return 0;
+}
+
+
+/*
+ * Called once for each context_entry found in a copied context_entry_table
+ * Each context_entry represents one PCIe device handled by the IOMMU.
+ *
+ * The 'domain_values_list' contains one 'domain_values_entry' for each
+ * unique domain-id found while copying the context entries for each iommu.
+ *
+ * The Intel-iommu spec. requires that every context_entry that contains
+ * the same domain-id point to the same set of page translation tables.
+ * The hardware uses this to improve the use of its translation cache.
+ * In order to insure that the copied translate tables abide by this
+ * requirement, this function keeps a list of domain-ids (dids) that
+ * have already been seen for this iommu. This function checks each entry
+ * already on the list for a domain-id that matches the domain-id in this
+ * context_entry.  If found, this function places the address of the previous
+ * context's tree of page translation tables into this context_entry.
+ * If a matching previous entry is not found, a new 'domain_values_entry'
+ * structure is created for the domain-id in this context_entry and
+ * copy_page_table is called to duplicate its tree of page tables.
+ */
+static int copy_context_entry(struct intel_iommu *iommu, u32 bus, u32 devfn,
+			      void *ppap, struct context_entry *ce)
+{
+	int ret = 0;			/* Integer Return Code */
+	u32 shift = 0;			/* bits to shift page_addr  */
+	u64 page_addr = 0;		/* Address of translated page */
+	unsigned long pgt_old_phys;	/* Adr(page_table in the old kernel) */
+	unsigned long pgt_new_phys;	/* Adr(page_table in the new kernel) */
+	u8  t;				/* Translation-type from context */
+	u8  aw;				/* Address-width from context */
+	u32 aw_shift[8] = {
+		12+9+9,		/* [000b] 30-bit AGAW (2-level page table) */
+		12+9+9+9,	/* [001b] 39-bit AGAW (3-level page table) */
+		12+9+9+9+9,	/* [010b] 48-bit AGAW (4-level page table) */
+		12+9+9+9+9+9,	/* [011b] 57-bit AGAW (5-level page table) */
+		12+9+9+9+9+9+7,	/* [100b] 64-bit AGAW (6-level page table) */
+		0,		/* [101b] Reserved */
+		0,		/* [110b] Reserved */
+		0,		/* [111b] Reserved */
+	};
+
+	struct domain_values_entry *dve = NULL;
+
+	if (!context_present(ce)) {	/* If (context not present) */
+		ret = RET_CCE_NOT_PRESENT;		/* Skip it */
+		goto exit;
+	}
+
+	t = context_translation_type(ce);
+	/* If we have seen this domain-id before on this iommu,
+	 * give this context the same page-tables and we are done.
+	 */
+	list_for_each_entry(dve, &domain_values_list[iommu->seq_id], link) {
+		if (dve->did == (int) context_domain_id(ce)) {
+			switch (t) {
+			case 0:	/* page tables */
+			case 1:	/* page tables */
+				context_set_address_root(ce,
+						virt_to_phys(dve->pgd));
+				ret = RET_CCE_PREVIOUS_DID;
+				break;
+
+			case 2:	/* Pass through */
+				if (dve->pgd == NULL)
+					ret =  RET_CCE_PASS_THROUGH_2;
+				else
+					ret = RET_BADCOPY;
+				break;
+
+			default: /* Bad value of 't'*/
+				ret = RET_BADCOPY;
+				break;
+			}
+			goto exit;
+		}
+	}
+
+	/* Since we now know that this is a new domain-id for this iommu,
+	 * create a new entry, add it to the list, and handle its
+	 * page tables.
+	 */
+
+	dve = kcalloc(1, sizeof(struct domain_values_entry), GFP_KERNEL);
+	if (!dve) {
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	dve->did = (int) context_domain_id(ce);
+	dve->gaw = (int) agaw_to_width(context_address_width(ce));
+	dve->pgd = NULL;
+	init_iova_domain(&dve->iovad, DMA_32BIT_PFN);
+
+	list_add(&dve->link, &domain_values_list[iommu->seq_id]);
+
+
+	if (t == 0 || t == 1) {		/* If (context has page tables) */
+		aw = context_address_width(ce);
+		shift = aw_shift[aw];
+
+		pgt_old_phys = context_address_root(ce) << VTD_PAGE_SHIFT;
+
+		ret = copy_page_table(&pgt_new_phys, pgt_old_phys,
+			shift-9, page_addr, iommu, bus, devfn, dve, ppap);
+
+		if (ret)		/* if (problem) bail out */
+			goto exit;
+
+		context_set_address_root(ce, pgt_new_phys);
+		dve->pgd = phys_to_virt(pgt_new_phys);
+		ret = RET_CCE_NEW_PAGE_TABLES;
+		goto exit;
+	}
+
+	if (t == 2) {		/* If (Identity mapped pass-through) */
+		ret = RET_CCE_PASS_THROUGH_1;	/* REVISIT: Skip for now */
+		goto exit;
+	}
+
+	ret = RET_CCE_RESERVED_VALUE;	/* Else ce->t is a Reserved value */
+	/* Note fall-through */
+
+exit:	/* all returns come through here to insure good clean-up */
+	return ret;
+}
+
+
+/*
+ * Called once for each context_entry_table found in the root_entry_table
+ */
+static int copy_context_entry_table(struct intel_iommu *iommu,
+				    u32 bus, void *ppap,
+				    unsigned long *context_new_p,
+				    unsigned long context_old_phys)
+{
+	int ret = 0;				/* Integer return code */
+	struct context_entry *ce;		/* Iterator */
+	unsigned long context_new_phys;		/* adr(table in new kernel) */
+	struct context_entry *context_new_virt;	/* adr(table in new kernel) */
+	u32 devfn = 0;				/* PCI Device & function */
+
+	/* allocate a context-entry table in the new kernel
+	 * copy contents from old kernel
+	 * then update each entry in the table in the new kernel
+	 */
+	context_new_virt =
+		(struct context_entry *)alloc_pgtable_page(iommu->node);
+	if (!context_new_virt)
+		return -ENOMEM;
+
+	context_new_phys = virt_to_phys(context_new_virt);
+
+	__iommu_load_from_oldmem(context_new_virt,
+					context_old_phys,
+					VTD_PAGE_SIZE);
+
+	for (devfn = 0, ce = context_new_virt; devfn < 256; devfn++, ce++) {
+
+		if (!context_present(ce))	/* If (context not present) */
+			continue;		/* Skip it */
+
+		ret = copy_context_entry(iommu, bus, devfn, ppap, ce);
+		if (ret < 0)		/* if (problem) */
+			return RET_BADCOPY;
+
+		switch (ret) {
+		case RET_CCE_NOT_PRESENT:
+			continue;
+		case RET_CCE_NEW_PAGE_TABLES:
+			continue;
+		case RET_CCE_PASS_THROUGH_1:
+			continue;
+		case RET_CCE_PASS_THROUGH_2:
+			continue;
+		case RET_CCE_RESERVED_VALUE:
+			return RET_BADCOPY;
+		case RET_CCE_PREVIOUS_DID:
+			continue;
+		default:
+			return RET_BADCOPY;
+		};
+	}
+
+	*context_new_p = context_new_phys;
+	return 0;
+}
+
+
+/*
+ * Highest-level function in the 'copy translation tables' set of functions
+ */
+static int copy_root_entry_table(struct intel_iommu *iommu, void *ppap)
+{
+	int ret = 0;				/* Integer return code */
+	u32 bus;				/* Index: root-entry-table */
+	struct root_entry  *re;			/* Virt(iterator: new table) */
+	unsigned long context_old_phys;	/* Phys(context table entry) */
+	unsigned long context_new_phys;	/* Phys(new context_entry) */
+
+	/*
+	 * allocate a root-entry table in the new kernel
+	 * copy contents from old kernel
+	 * then update each entry in the table in the new kernel
+	 */
+
+	if (!iommu->root_entry_old_phys)
+		return -ENOMEM;
+
+	for (bus = 0, re = iommu->root_entry; bus < 256; bus += 1, re += 1) {
+		if (!root_present(re))
+			continue;
+
+		context_old_phys = get_context_phys_from_root(re);
+
+		if (!context_old_phys)
+			continue;
+
+		context_new_phys = 0;
+		ret = copy_context_entry_table(iommu, bus, ppap,
+						&context_new_phys,
+						context_old_phys);
+		if (ret)
+			return ret;
+		__iommu_flush_cache(iommu,
+				phys_to_virt(context_new_phys),
+				VTD_PAGE_SIZE);
+
+		set_root_value(re, context_new_phys);
+	}
+
+	return 0;
+}
+/*
+ * Interface to the "copy translation tables" set of functions
+ * from mainline code.
+ */
+static int intel_iommu_load_translation_tables(struct dmar_drhd_unit *drhd,
+		int g_num_of_iommus)
+{
+	struct intel_iommu *iommu;	/* Virt(iommu hardware registers) */
+	unsigned long long q;		/* quadword scratch */
+	int ret = 0;			/* Integer return code */
+	int i = 0;			/* Loop index */
+	unsigned long flags;
+
+	/* Structure so copy_page_addr() can accumulate things
+	 * over multiple calls and returns
+	 */
+	struct copy_page_addr_parms ppa_parms = copy_page_addr_parms_init;
+	struct copy_page_addr_parms *ppap = &ppa_parms;
+
+
+	iommu = drhd->iommu;
+	q = dmar_readq(iommu->reg + DMAR_RTADDR_REG);
+	if (!q)
+		return -1;
+
+	/* If (list needs initializing) do it here */
+	if (!domain_values_list) {
+		domain_values_list =
+			 kcalloc(g_num_of_iommus, sizeof(struct list_head),
+					GFP_KERNEL);
+
+		if (!domain_values_list) {
+			pr_err("Allocation failed for domain_values_list array\n");
+			return -ENOMEM;
+		}
+		for (i = 0; i < g_num_of_iommus; i++)
+			INIT_LIST_HEAD(&domain_values_list[i]);
+	}
+
+	spin_lock_irqsave(&iommu->lock, flags);
+
+	/* Load the root-entry table from the old kernel
+	 * foreach context_entry_table in root_entry
+	 *    foreach context_entry in context_entry_table
+	 *       foreach level-1 page_table_entry in context_entry
+	 *          foreach level-2 page_table_entry in level 1 page_table_entry
+	 *             Above pattern continues up to 6 levels of page tables
+	 *                Sanity-check the entry
+	 *                Process the bus, devfn, page_address, page_size
+	 */
+	if (!iommu->root_entry) {
+		iommu->root_entry =
+			(struct root_entry *)alloc_pgtable_page(iommu->node);
+		if (!iommu->root_entry) {
+			spin_unlock_irqrestore(&iommu->lock, flags);
+			return -ENOMEM;
+		}
+	}
+
+	iommu->root_entry_old_phys = q & VTD_PAGE_MASK;
+	if (!iommu->root_entry_old_phys) {
+		pr_err("Could not read old root entry address.");
+		return -1;
+	}
+
+	iommu->root_entry_old_virt = ioremap_cache(iommu->root_entry_old_phys,
+						VTD_PAGE_SIZE);
+	if (!iommu->root_entry_old_virt) {
+		pr_err("Could not map the old root entry.");
+		return -ENOMEM;
+	}
+
+	__iommu_load_old_root_entry(iommu);
+	ret = copy_root_entry_table(iommu, ppap);
+	__iommu_update_old_root_entry(iommu, -1);
+
+	spin_unlock_irqrestore(&iommu->lock, flags);
+
+	__iommu_free_mapped_mem();
+
+	if (ret)
+		return ret;
+
+
+	ppa_parms.last = 1;
+	copy_page_addr(0, 0, 0, 0, 0, NULL, ppap);
+
+	return 0;
+}
+
 #endif /* CONFIG_CRASH_DUMP */
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 07/10] iommu/vt-d: enable kdump support in iommu module
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (5 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 08/10] iommu/vtd: assign new page table for dma_map Li, Zhen-Hua
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Modify the operation of the following functions when called during crash dump:
    device_to_domain_id
    get_domain_for_dev
    init_dmars
    intel_iommu_init

Bill Sumner:
    Original version.

Zhenhua:
    Minor change,
    The name of new calling functions.
    Do not disable and re-enable TE in kdump kernel.

Signed-off-by: Bill Sumner <billsumnerlinux@gmail.com>
Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 142 ++++++++++++++++++++++++++++++++++++++------
 1 file changed, 125 insertions(+), 17 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index f9849cb..4efed7c 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -907,6 +907,11 @@ static struct context_entry * device_to_context_entry(struct intel_iommu *iommu,
 		set_root_value(root, phy_addr);
 		set_root_present(root);
 		__iommu_flush_cache(iommu, root, sizeof(*root));
+
+#ifdef CONFIG_CRASH_DUMP
+		if (is_kdump_kernel())
+			__iommu_update_old_root_entry(iommu, bus);
+#endif
 	}
 	spin_unlock_irqrestore(&iommu->lock, flags);
 	return &context[devfn];
@@ -958,7 +963,8 @@ static void free_context_table(struct intel_iommu *iommu)
 
 	spin_lock_irqsave(&iommu->lock, flags);
 	if (!iommu->root_entry) {
-		goto out;
+		spin_unlock_irqrestore(&iommu->lock, flags);
+		return;
 	}
 	for (i = 0; i < ROOT_ENTRY_NR; i++) {
 		root = &iommu->root_entry[i];
@@ -966,10 +972,26 @@ static void free_context_table(struct intel_iommu *iommu)
 		if (context)
 			free_pgtable_page(context);
 	}
-	free_pgtable_page(iommu->root_entry);
-	iommu->root_entry = NULL;
-out:
+
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel()) {
+		iommu->root_entry_old_phys = 0;
+		root = iommu->root_entry;
+		iommu->root_entry = NULL;
+	} else {
+#endif
+		free_pgtable_page(iommu->root_entry);
+		iommu->root_entry = NULL;
+#ifdef CONFIG_CRASH_DUMP
+	}
+#endif
+
 	spin_unlock_irqrestore(&iommu->lock, flags);
+
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel())
+		iounmap(root);
+#endif
 }
 
 static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
@@ -2381,6 +2403,9 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
 	unsigned long flags;
 	u8 bus, devfn;
 	int did = -1;   /* Default to "no domain_id supplied" */
+#ifdef CONFIG_CRASH_DUMP
+	struct domain_values_entry *dve = NULL;
+#endif /* CONFIG_CRASH_DUMP */
 
 	domain = find_domain(dev);
 	if (domain)
@@ -2414,6 +2439,24 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
 	domain = alloc_domain(0);
 	if (!domain)
 		return NULL;
+
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel()) {
+		/*
+		 * if this device had a did in the old kernel
+		 * use its values instead of generating new ones
+		 */
+		did = device_to_domain_id(iommu, bus, devfn);
+		if (did > 0 || (did == 0 && !cap_caching_mode(iommu->cap)))
+			dve = intel_iommu_did_to_domain_values_entry(did,
+								iommu);
+		if (dve)
+			gaw = dve->gaw;
+		else
+			did = -1;
+	}
+#endif /* CONFIG_CRASH_DUMP */
+
 	domain->id = iommu_attach_domain(domain, iommu, did);
 	if (domain->id < 0) {
 		free_domain_mem(domain);
@@ -2425,6 +2468,18 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
 		return NULL;
 	}
 
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel() && dve) {
+
+		if (domain->pgd)
+			free_pgtable_page(domain->pgd);
+
+		domain->pgd = dve->pgd;
+
+		copy_reserved_iova(&dve->iovad, &domain->iovad);
+	}
+#endif /* CONFIG_CRASH_DUMP */
+
 	/* register PCI DMA alias device */
 	if (dev_is_pci(dev)) {
 		tmp = dmar_insert_dev_info(iommu, PCI_BUS_NUM(dma_alias),
@@ -2948,14 +3003,35 @@ static int __init init_dmars(void)
 		if (ret)
 			goto free_iommu;
 
-		/*
-		 * TBD:
-		 * we could share the same root & context tables
-		 * among all IOMMU's. Need to Split it later.
-		 */
-		ret = iommu_alloc_root_entry(iommu);
-		if (ret)
-			goto free_iommu;
+#ifdef CONFIG_CRASH_DUMP
+		if (is_kdump_kernel()) {
+			pr_info("IOMMU Copying translate tables from panicked kernel\n");
+			ret = intel_iommu_load_translation_tables(drhd,
+					g_num_of_iommus);
+			if (ret) {
+				pr_err("IOMMU: Copy translate tables failed\n");
+
+				/* Best to stop trying */
+				goto free_iommu;
+			}
+			pr_info("IOMMU: root_cache:0x%12.12llx phys:0x%12.12llx\n",
+				(u64)iommu->root_entry,
+				(u64)iommu->root_entry_old_phys);
+			intel_iommu_get_dids_from_old_kernel(iommu);
+		} else {
+#endif /* CONFIG_CRASH_DUMP */
+			/*
+			 * TBD:
+			 * we could share the same root & context tables
+			 * among all IOMMU's. Need to Split it later.
+			 */
+			ret = iommu_alloc_root_entry(iommu);
+			if (ret)
+				goto free_iommu;
+#ifdef CONFIG_CRASH_DUMP
+		}
+#endif
+
 		if (!ecap_pass_through(iommu->ecap))
 			hw_pass_through = 0;
 	}
@@ -2972,6 +3048,16 @@ static int __init init_dmars(void)
 
 	check_tylersburg_isoch();
 
+#ifdef CONFIG_CRASH_DUMP
+	/*
+	 * In the crashdump kernel: Skip setting-up new domains for
+	 * si, rmrr, and the isa bus on the expectation that these
+	 * translations were copied from the old kernel.
+	 */
+	if (is_kdump_kernel())
+		goto skip_new_domains_for_si_rmrr_isa;
+#endif /* CONFIG_CRASH_DUMP */
+
 	/*
 	 * If pass through is not set or not enabled, setup context entries for
 	 * identity mappings for rmrr, gfx, and isa and may fall back to static
@@ -3012,6 +3098,10 @@ static int __init init_dmars(void)
 
 	iommu_prepare_isa();
 
+#ifdef CONFIG_CRASH_DUMP
+skip_new_domains_for_si_rmrr_isa:;
+#endif /* CONFIG_CRASH_DUMP */
+
 	/*
 	 * for each drhd
 	 *   enable fault log
@@ -3040,7 +3130,15 @@ static int __init init_dmars(void)
 
 		iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
 		iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
-		iommu_enable_translation(iommu);
+
+#ifdef CONFIG_CRASH_DUMP
+		if (is_kdump_kernel()) {
+			if (!(iommu->gcmd & DMA_GCMD_TE))
+				iommu_enable_translation(iommu);
+		} else
+#endif
+			iommu_enable_translation(iommu);
+
 		iommu_disable_protect_mem_regions(iommu);
 	}
 
@@ -4351,12 +4449,22 @@ int __init intel_iommu_init(void)
 		goto out_free_dmar;
 	}
 
+#ifdef CONFIG_CRASH_DUMP
 	/*
-	 * Disable translation if already enabled prior to OS handover.
+	 * If (This is the crash kernel)
+	 *    Set: copy iommu translate tables from old kernel
+	 *    Skip disabling the iommu hardware translations
 	 */
-	for_each_active_iommu(iommu, drhd)
-		if (iommu->gcmd & DMA_GCMD_TE)
-			iommu_disable_translation(iommu);
+	if (is_kdump_kernel()) {
+		pr_info("IOMMU Skip disabling iommu hardware translations\n");
+	} else
+#endif /* CONFIG_CRASH_DUMP */
+		/*
+		 * Disable translation if already enabled prior to OS handover.
+		 */
+		for_each_active_iommu(iommu, drhd)
+			if (iommu->gcmd & DMA_GCMD_TE)
+				iommu_disable_translation(iommu);
 
 	if (dmar_dev_scope_init() < 0) {
 		if (force_on)
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 08/10] iommu/vtd: assign new page table for dma_map
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (6 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

When a device driver issues the first dma_map command for a
device, we assign a new and empty page-table, thus removing all
mappings from the old kernel for the device.

Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel-iommu.c | 56 ++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 48 insertions(+), 8 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 4efed7c..7f8b546 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -44,6 +44,7 @@
 #include <asm/irq_remapping.h>
 #include <asm/cacheflush.h>
 #include <asm/iommu.h>
+#include <linux/dma-mapping.h>
 
 #include "irq_remapping.h"
 
@@ -455,6 +456,8 @@ static int copy_root_entry_table(struct intel_iommu *iommu, void *ppap);
 static int intel_iommu_load_translation_tables(struct dmar_drhd_unit *drhd,
 		int g_num_of_iommus);
 
+static void unmap_device_dma(struct dmar_domain *domain, struct device *dev);
+
 #endif /* CONFIG_CRASH_DUMP */
 
 /*
@@ -3199,14 +3202,30 @@ static struct dmar_domain *__get_valid_domain_for_dev(struct device *dev)
 		return NULL;
 	}
 
-	/* make sure context mapping is ok */
-	if (unlikely(!domain_context_mapped(dev))) {
-		ret = domain_context_mapping(domain, dev, CONTEXT_TT_MULTI_LEVEL);
-		if (ret) {
-			printk(KERN_ERR "Domain context map for %s failed",
-			       dev_name(dev));
-			return NULL;
-		}
+	/* if in kdump kernel, we need to unmap the mapped dma pages,
+	 * detach this device first.
+	 */
+	if (likely(domain_context_mapped(dev))) {
+#ifdef CONFIG_CRASH_DUMP
+		if (is_kdump_kernel()) {
+			unmap_device_dma(domain, dev);
+			domain = get_domain_for_dev(dev,
+				DEFAULT_DOMAIN_ADDRESS_WIDTH);
+			if (!domain) {
+				pr_err("Allocating domain for %s failed",
+				       dev_name(dev));
+				return NULL;
+			}
+		} else
+#endif
+			return domain;
+	}
+
+	ret = domain_context_mapping(domain, dev, CONTEXT_TT_MULTI_LEVEL);
+	if (ret) {
+		pr_err("Domain context map for %s failed",
+		       dev_name(dev));
+		return NULL;
 	}
 
 	return domain;
@@ -5687,4 +5706,25 @@ static int intel_iommu_load_translation_tables(struct dmar_drhd_unit *drhd,
 	return 0;
 }
 
+static void unmap_device_dma(struct dmar_domain *domain, struct device *dev)
+{
+	struct intel_iommu *iommu;
+	struct context_entry *ce;
+	struct iova *iova;
+	u8 bus, devfn;
+	phys_addr_t phys_addr;
+	dma_addr_t dev_addr;
+
+	iommu = device_to_iommu(dev, &bus, &devfn);
+	ce = device_to_context_entry(iommu, bus, devfn);
+	phys_addr = context_address_root(ce) << VTD_PAGE_SHIFT;
+	dev_addr = phys_to_dma(dev, phys_addr);
+
+	iova = find_iova(&domain->iovad, IOVA_PFN(dev_addr));
+	if (iova)
+		intel_unmap(dev, dev_addr);
+
+	domain_remove_one_dev_info(domain, dev);
+}
+
 #endif /* CONFIG_CRASH_DUMP */
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 09/10] iommu/vt-d: Copy functions for irte
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (7 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 08/10] iommu/vtd: assign new page table for dma_map Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:15 ` [PATCH 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Functions to copy the irte data from the old kernel into the kdump kernel.

Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel_irq_remapping.c | 57 +++++++++++++++++++++++++++++++++++++
 include/linux/intel-iommu.h         |  4 +++
 2 files changed, 61 insertions(+)

diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index a55b207..13f2034 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -8,6 +8,7 @@
 #include <linux/irq.h>
 #include <linux/intel-iommu.h>
 #include <linux/acpi.h>
+#include <linux/crash_dump.h>
 #include <asm/io_apic.h>
 #include <asm/smp.h>
 #include <asm/cpu.h>
@@ -17,6 +18,11 @@
 
 #include "irq_remapping.h"
 
+#ifdef CONFIG_CRASH_DUMP
+static int __iommu_load_old_irte(struct intel_iommu *iommu);
+static int __iommu_update_old_irte(struct intel_iommu *iommu, int index);
+#endif /* CONFIG_CRASH_DUMP */
+
 struct ioapic_scope {
 	struct intel_iommu *iommu;
 	unsigned int id;
@@ -1296,3 +1302,54 @@ int dmar_ir_hotplug(struct dmar_drhd_unit *dmaru, bool insert)
 
 	return ret;
 }
+
+#ifdef CONFIG_CRASH_DUMP
+
+static int __iommu_load_old_irte(struct intel_iommu *iommu)
+{
+	if ((!iommu)
+		|| (!iommu->ir_table)
+		|| (!iommu->ir_table->base)
+		|| (!iommu->ir_table->base_old_phys)
+		|| (!iommu->ir_table->base_old_virt))
+		return -1;
+
+	memcpy(iommu->ir_table->base,
+		iommu->ir_table->base_old_virt,
+		INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte));
+
+	return 0;
+}
+
+static int __iommu_update_old_irte(struct intel_iommu *iommu, int index)
+{
+	int start;
+	unsigned long size;
+	void __iomem *to;
+	void *from;
+
+	if ((!iommu)
+		|| (!iommu->ir_table)
+		|| (!iommu->ir_table->base)
+		|| (!iommu->ir_table->base_old_phys)
+		|| (!iommu->ir_table->base_old_virt))
+		return -1;
+
+	if (index < -1 || index >= INTR_REMAP_TABLE_ENTRIES)
+		return -1;
+
+	if (index == -1) {
+		start = 0;
+		size = INTR_REMAP_TABLE_ENTRIES * sizeof(struct irte);
+	} else {
+		start = index * sizeof(struct irte);
+		size = sizeof(struct irte);
+	}
+
+	to = iommu->ir_table->base_old_virt;
+	from = iommu->ir_table->base;
+	memcpy(to + start, from + start, size);
+
+	return 0;
+}
+#endif /* CONFIG_CRASH_DUMP */
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index 8e29b97..76c6ea5 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -290,6 +290,10 @@ struct q_inval {
 struct ir_table {
 	struct irte *base;
 	unsigned long *bitmap;
+#ifdef CONFIG_CRASH_DUMP
+	void __iomem *base_old_virt;
+	unsigned long base_old_phys;
+#endif
 };
 #endif
 
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 10/10] iommu/vt-d: Use old irte in kdump kernel
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (8 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
@ 2014-12-22  9:15 ` Li, Zhen-Hua
  2014-12-22  9:43 ` [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults " Li, ZhenHua
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-22  9:15 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung
  Cc: iommu, linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux, zhen-hual

Fix the intr-remapping fault.

[1.594890] dmar: DRHD: handling fault status reg 2
[1.594894] dmar: INTR-REMAP: Request device [[41:00.0] fault index 4d
[1.594894] INTR-REMAP:[fault reason 34] Present field in the IRTE entry
is clear

Use old irte in kdump kernel, do not disable and re-enable interrupt
remapping.

Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
---
 drivers/iommu/intel_irq_remapping.c | 42 ++++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 13f2034..e244186 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -198,6 +198,11 @@ static int modify_irte(int irq, struct irte *irte_modified)
 
 	set_64bit(&irte->low, irte_modified->low);
 	set_64bit(&irte->high, irte_modified->high);
+
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel())
+		__iommu_update_old_irte(iommu, index);
+#endif
 	__iommu_flush_cache(iommu, irte, sizeof(*irte));
 
 	rc = qi_flush_iec(iommu, index, 0);
@@ -259,6 +264,11 @@ static int clear_entries(struct irq_2_iommu *irq_iommu)
 	bitmap_release_region(iommu->ir_table->bitmap, index,
 			      irq_iommu->irte_mask);
 
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel())
+		__iommu_update_old_irte(iommu, -1);
+#endif
+
 	return qi_flush_iec(iommu, index, irq_iommu->irte_mask);
 }
 
@@ -640,11 +650,20 @@ static int __init intel_enable_irq_remapping(void)
 		 */
 		dmar_fault(-1, iommu);
 
-		/*
-		 * Disable intr remapping and queued invalidation, if already
-		 * enabled prior to OS handover.
-		 */
-		iommu_disable_irq_remapping(iommu);
+#ifdef CONFIG_CRASH_DUMP
+		if (is_kdump_kernel()) {
+			/* Do notdisable irq and then re-enable again. */
+		} else {
+#endif
+			/*
+			 * Disable intr remapping and queued invalidation,
+			 * if already enabled prior to OS handover.
+			 */
+			iommu_disable_irq_remapping(iommu);
+
+#ifdef CONFIG_CRASH_DUMP
+		}
+#endif
 
 		dmar_disable_qi(iommu);
 	}
@@ -687,7 +706,20 @@ static int __init intel_enable_irq_remapping(void)
 		if (intel_setup_irq_remapping(iommu))
 			goto error;
 
+#ifdef CONFIG_CRASH_DUMP
+	if (is_kdump_kernel()) {
+		unsigned long long q;
+
+		q = dmar_readq(iommu->reg + DMAR_IRTA_REG);
+		iommu->ir_table->base_old_phys = q & VTD_PAGE_MASK;
+		iommu->ir_table->base_old_virt = ioremap_cache(
+				iommu->ir_table->base_old_phys,
+				INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte));
+		__iommu_load_old_irte(iommu);
+	} else
+#endif
 		iommu_set_irq_remapping(iommu, eim);
+
 		setup = 1;
 	}
 
-- 
2.0.0-rc0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (9 preceding siblings ...)
  2014-12-22  9:15 ` [PATCH 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
@ 2014-12-22  9:43 ` Li, ZhenHua
  2014-12-26  5:13 ` Takao Indoh
  2015-01-06  6:37 ` Baoquan He
  12 siblings, 0 replies; 21+ messages in thread
From: Li, ZhenHua @ 2014-12-22  9:43 UTC (permalink / raw)
  To: Li, Zhen-Hua
  Cc: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung, iommu,
	linux-kernel, linux-pci, kexec, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell, billsumnerlinux

This version works for 3.19.0-rc1.

Zhenhua
On 12/22/2014 05:15 PM, Li, Zhen-Hua wrote:
> This patchset is an update of Bill Sumner's patchset, implements a fix for:
> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
> when a panic happens, the kdump kernel will boot with these faults:
>
>      dmar: DRHD: handling fault status reg 102
>      dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>      DMAR:[fault reason 01] Present bit in root entry is clear
>
>      dmar: DRHD: handling fault status reg 2
>      dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>      INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>
> On some system, the interrupt remapping fault will also happen even if the
> intel_iommu is not set to on, because the interrupt remapping will be enabled
> when x2apic is needed by the system.
>
> The cause of the DMA fault is described in Bill's original version, and the
> INTR-Remap fault is caused by a similar reason. In short, the initialization
> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
> response.
>
> To fix this problem, we modifies the behaviors of the intel vt-d in the
> crashdump kernel:
>
> For DMA Remapping:
> 1. To accept the vt-d hardware in an active state,
> 2. Do not disable and re-enable the translation, keep it enabled.
> 3. Use the old root entry table, do not rewrite the RTA register.
> 4. Malloc and use new context entry table and page table, copy data from the
>     old ones that used by the old kernel.
> 5. to use different portions of the iova address ranges for the device drivers
>     in the crashdump kernel than the iova ranges that were in-use at the time
>     of the panic.
> 6. After device driver is loaded, when it issues the first dma_map command,
>     free the dmar_domain structure for this device, and generate a new one, so
>     that the device can be assigned a new and empty page table.
> 7. When a new context entry table is generated, we also save its address to
>     the old root entry table.
>
> For Interrupt Remapping:
> 1. To accept the vt-d hardware in an active state,
> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>     the updated data will be stored to the old interrupt remapping table.
>
> Advantages of this approach:
> 1. All manipulation of the IO-device is done by the Linux device-driver
>     for that device.
> 2. This approach behaves in a manner very similar to operation without an
>     active iommu.
> 3. Any activity between the IO-device and its RMRR areas is handled by the
>     device-driver in the same manner as during a non-kdump boot.
> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>     This supports the practice of creating a special kdump kernel without
>     drivers for any devices that are not required for taking a crashdump.
> 5. Minimal code-changes among the existing mainline intel vt-d code.
>
> Summary of changes in this patch set:
> 1. Added some useful function for root entry table in code intel-iommu.c
> 2. Added new members to struct root_entry and struct irte;
> 3. Functions to load old root entry table to iommu->root_entry from the memory
>     of old kernel.
> 4. Functions to malloc new context entry table and page table and copy the data
>     from the old ones to the malloced new ones.
> 5. Functions to enable support for DMA remapping in kdump kernel.
> 6. Functions to load old irte data from the old kernel to the kdump kernel.
> 7. Some code changes that support other behaviours that have been listed.
> 8. In the new functions, use physical address as "unsigned long" type, not
>     pointers.
>
> Original version by Bill Sumner:
>      https://lkml.org/lkml/2014/1/10/518
>      https://lkml.org/lkml/2014/4/15/716
>      https://lkml.org/lkml/2014/4/24/836
>
> Zhenhua's last of Bill's patchset:
>      https://lkml.org/lkml/2014/10/21/134
>      https://lkml.org/lkml/2014/12/15/121
>
> Changed in this version:
> 1. Do not disable and re-enable traslation and interrupt remapping.
> 2. Use old root entry table.
> 3. Use old interrupt remapping table.
> 4. Use "unsigned long" as physical address.
> 5. Use intel_unmap to unmap the old dma;
>
> This patchset should be applied with this one together:
>      https://lkml.org/lkml/2014/11/5/43
>      x86/iommu: fix incorrect bit operations in setting values
>
> Bill Sumner (5):
>    iommu/vt-d: Update iommu_attach_domain() and its callers
>    iommu/vt-d: Items required for kdump
>    iommu/vt-d: data types and functions used for kdump
>    iommu/vt-d: Add domain-id functions
>    iommu/vt-d: enable kdump support in iommu module
>
> Li, Zhen-Hua (10):
>    iommu/vt-d: Update iommu_attach_domain() and its callers
>    iommu/vt-d: Items required for kdump
>    iommu/vt-d: Add domain-id functions
>    iommu/vt-d: functions to copy data from old mem
>    iommu/vt-d: Add functions to load and save old re
>    iommu/vt-d: datatypes and functions used for kdump
>    iommu/vt-d: enable kdump support in iommu module
>    iommu/vtd: assign new page table for dma_map
>    iommu/vt-d: Copy functions for irte
>    iommu/vt-d: Use old irte in kdump kernel
>
>   drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>   drivers/iommu/intel_irq_remapping.c |   99 +++-
>   include/linux/intel-iommu.h         |   18 +
>   3 files changed, 1123 insertions(+), 44 deletions(-)
>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (10 preceding siblings ...)
  2014-12-22  9:43 ` [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults " Li, ZhenHua
@ 2014-12-26  5:13 ` Takao Indoh
  2014-12-26  6:46   ` Li, ZhenHua
  2015-01-06  6:37 ` Baoquan He
  12 siblings, 1 reply; 21+ messages in thread
From: Takao Indoh @ 2014-12-26  5:13 UTC (permalink / raw)
  To: zhen-hual
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

Hi Zhen-Hua,

I tested your patch and found two problems.

[1]
Kenel panic occurs during 2nd kernel boot.

..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
 0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
 ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
 ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
Call Trace:
 [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
 [<ffffffff815b19f1>] panic+0xbb/0x1fa
 [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
 [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
 [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
 [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
 [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
 [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
 [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
 [<ffffffff815aaf00>] ? rest_init+0x80/0x80
 [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
 [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
 [<ffffffff815aaf00>] ? rest_init+0x80/0x80
---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC


This panic seems to be related to unflushed cache. I confirmed this
problem was fixed by the following patch.

--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
 	set_64bit(&irte->high, irte_modified->high);
 
 #ifdef CONFIG_CRASH_DUMP
-	if (is_kdump_kernel())
+	if (is_kdump_kernel()) {
 		__iommu_update_old_irte(iommu, index);
+		__iommu_flush_cache(iommu,
+			iommu->ir_table->base_old_virt +
+			index * sizeof(struct irte),
+			sizeof(struct irte));
+	}
 #endif
 	__iommu_flush_cache(iommu, irte, sizeof(*irte));
 

[2]
Some DMAR error messages are still found in 2nd kernel boot.

dmar: DRHD: handling fault status reg 2
dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
DMAR:[fault reason 01] Present bit in root entry is clear

I confiremd your commit 1a2262 was already applied. Any idea?

Thanks,
Takao Indoh


On 2014/12/22 18:15, Li, Zhen-Hua wrote:
> This patchset is an update of Bill Sumner's patchset, implements a fix for:
> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
> when a panic happens, the kdump kernel will boot with these faults:
> 
>      dmar: DRHD: handling fault status reg 102
>      dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>      DMAR:[fault reason 01] Present bit in root entry is clear
> 
>      dmar: DRHD: handling fault status reg 2
>      dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>      INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
> 
> On some system, the interrupt remapping fault will also happen even if the
> intel_iommu is not set to on, because the interrupt remapping will be enabled
> when x2apic is needed by the system.
> 
> The cause of the DMA fault is described in Bill's original version, and the
> INTR-Remap fault is caused by a similar reason. In short, the initialization
> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
> response.
> 
> To fix this problem, we modifies the behaviors of the intel vt-d in the
> crashdump kernel:
> 
> For DMA Remapping:
> 1. To accept the vt-d hardware in an active state,
> 2. Do not disable and re-enable the translation, keep it enabled.
> 3. Use the old root entry table, do not rewrite the RTA register.
> 4. Malloc and use new context entry table and page table, copy data from the
>     old ones that used by the old kernel.
> 5. to use different portions of the iova address ranges for the device drivers
>     in the crashdump kernel than the iova ranges that were in-use at the time
>     of the panic.
> 6. After device driver is loaded, when it issues the first dma_map command,
>     free the dmar_domain structure for this device, and generate a new one, so
>     that the device can be assigned a new and empty page table.
> 7. When a new context entry table is generated, we also save its address to
>     the old root entry table.
> 
> For Interrupt Remapping:
> 1. To accept the vt-d hardware in an active state,
> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>     the updated data will be stored to the old interrupt remapping table.
> 
> Advantages of this approach:
> 1. All manipulation of the IO-device is done by the Linux device-driver
>     for that device.
> 2. This approach behaves in a manner very similar to operation without an
>     active iommu.
> 3. Any activity between the IO-device and its RMRR areas is handled by the
>     device-driver in the same manner as during a non-kdump boot.
> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>     This supports the practice of creating a special kdump kernel without
>     drivers for any devices that are not required for taking a crashdump.
> 5. Minimal code-changes among the existing mainline intel vt-d code.
> 
> Summary of changes in this patch set:
> 1. Added some useful function for root entry table in code intel-iommu.c
> 2. Added new members to struct root_entry and struct irte;
> 3. Functions to load old root entry table to iommu->root_entry from the memory
>     of old kernel.
> 4. Functions to malloc new context entry table and page table and copy the data
>     from the old ones to the malloced new ones.
> 5. Functions to enable support for DMA remapping in kdump kernel.
> 6. Functions to load old irte data from the old kernel to the kdump kernel.
> 7. Some code changes that support other behaviours that have been listed.
> 8. In the new functions, use physical address as "unsigned long" type, not
>     pointers.
> 
> Original version by Bill Sumner:
>      https://lkml.org/lkml/2014/1/10/518
>      https://lkml.org/lkml/2014/4/15/716
>      https://lkml.org/lkml/2014/4/24/836
> 
> Zhenhua's last of Bill's patchset:
>      https://lkml.org/lkml/2014/10/21/134
>      https://lkml.org/lkml/2014/12/15/121
> 
> Changed in this version:
> 1. Do not disable and re-enable traslation and interrupt remapping.
> 2. Use old root entry table.
> 3. Use old interrupt remapping table.
> 4. Use "unsigned long" as physical address.
> 5. Use intel_unmap to unmap the old dma;
> 
> This patchset should be applied with this one together:
>      https://lkml.org/lkml/2014/11/5/43
>      x86/iommu: fix incorrect bit operations in setting values
> 
> Bill Sumner (5):
>    iommu/vt-d: Update iommu_attach_domain() and its callers
>    iommu/vt-d: Items required for kdump
>    iommu/vt-d: data types and functions used for kdump
>    iommu/vt-d: Add domain-id functions
>    iommu/vt-d: enable kdump support in iommu module
> 
> Li, Zhen-Hua (10):
>    iommu/vt-d: Update iommu_attach_domain() and its callers
>    iommu/vt-d: Items required for kdump
>    iommu/vt-d: Add domain-id functions
>    iommu/vt-d: functions to copy data from old mem
>    iommu/vt-d: Add functions to load and save old re
>    iommu/vt-d: datatypes and functions used for kdump
>    iommu/vt-d: enable kdump support in iommu module
>    iommu/vtd: assign new page table for dma_map
>    iommu/vt-d: Copy functions for irte
>    iommu/vt-d: Use old irte in kdump kernel
> 
>   drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>   drivers/iommu/intel_irq_remapping.c |   99 +++-
>   include/linux/intel-iommu.h         |   18 +
>   3 files changed, 1123 insertions(+), 44 deletions(-)
> 



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-26  5:13 ` Takao Indoh
@ 2014-12-26  6:46   ` Li, ZhenHua
  2014-12-26  7:27     ` Takao Indoh
  0 siblings, 1 reply; 21+ messages in thread
From: Li, ZhenHua @ 2014-12-26  6:46 UTC (permalink / raw)
  To: Takao Indoh
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

Hi Takao Indoh,

Thank you very much for your testing. I will add your update in next
version.
Also I think a flush for __iommu_update_old_root_entry is also necessary.

Currently I have no idea about your fault, does it happen before or
during its loading? Could you send me your full kernel log as an
attachment?

Regards and Merry Christmas.
Zhenhua

On 12/26/2014 01:13 PM, Takao Indoh wrote:
> Hi Zhen-Hua,
>
> I tested your patch and found two problems.
>
> [1]
> Kenel panic occurs during 2nd kernel boot.
>
> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
> Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
> Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
>  0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
>  ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
>  ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
> Call Trace:
>  [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
>  [<ffffffff815b19f1>] panic+0xbb/0x1fa
>  [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
>  [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
>  [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
>  [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
>  [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
>  [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
>  [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
>  [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>  [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
>  [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
>  [<ffffffff815aaf00>] ? rest_init+0x80/0x80
> ---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>
>
> This panic seems to be related to unflushed cache. I confirmed this
> problem was fixed by the following patch.
>
> --- a/drivers/iommu/intel_irq_remapping.c
> +++ b/drivers/iommu/intel_irq_remapping.c
> @@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
>  	set_64bit(&irte->high, irte_modified->high);
>  
>  #ifdef CONFIG_CRASH_DUMP
> -	if (is_kdump_kernel())
> +	if (is_kdump_kernel()) {
>  		__iommu_update_old_irte(iommu, index);
> +		__iommu_flush_cache(iommu,
> +			iommu->ir_table->base_old_virt +
> +			index * sizeof(struct irte),
> +			sizeof(struct irte));
> +	}
>  #endif
>  	__iommu_flush_cache(iommu, irte, sizeof(*irte));
>  
>
> [2]
> Some DMAR error messages are still found in 2nd kernel boot.
>
> dmar: DRHD: handling fault status reg 2
> dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
> DMAR:[fault reason 01] Present bit in root entry is clear
>
> I confiremd your commit 1a2262 was already applied. Any idea?
>
> Thanks,
> Takao Indoh
>
>
> On 2014/12/22 18:15, Li, Zhen-Hua wrote:
>> This patchset is an update of Bill Sumner's patchset, implements a fix for:
>> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
>> when a panic happens, the kdump kernel will boot with these faults:
>>
>>      dmar: DRHD: handling fault status reg 102
>>      dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>>      DMAR:[fault reason 01] Present bit in root entry is clear
>>
>>      dmar: DRHD: handling fault status reg 2
>>      dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>>      INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>>
>> On some system, the interrupt remapping fault will also happen even if the
>> intel_iommu is not set to on, because the interrupt remapping will be enabled
>> when x2apic is needed by the system.
>>
>> The cause of the DMA fault is described in Bill's original version, and the
>> INTR-Remap fault is caused by a similar reason. In short, the initialization
>> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
>> response.
>>
>> To fix this problem, we modifies the behaviors of the intel vt-d in the
>> crashdump kernel:
>>
>> For DMA Remapping:
>> 1. To accept the vt-d hardware in an active state,
>> 2. Do not disable and re-enable the translation, keep it enabled.
>> 3. Use the old root entry table, do not rewrite the RTA register.
>> 4. Malloc and use new context entry table and page table, copy data from the
>>     old ones that used by the old kernel.
>> 5. to use different portions of the iova address ranges for the device drivers
>>     in the crashdump kernel than the iova ranges that were in-use at the time
>>     of the panic.
>> 6. After device driver is loaded, when it issues the first dma_map command,
>>     free the dmar_domain structure for this device, and generate a new one, so
>>     that the device can be assigned a new and empty page table.
>> 7. When a new context entry table is generated, we also save its address to
>>     the old root entry table.
>>
>> For Interrupt Remapping:
>> 1. To accept the vt-d hardware in an active state,
>> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
>> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
>> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>>     the updated data will be stored to the old interrupt remapping table.
>>
>> Advantages of this approach:
>> 1. All manipulation of the IO-device is done by the Linux device-driver
>>     for that device.
>> 2. This approach behaves in a manner very similar to operation without an
>>     active iommu.
>> 3. Any activity between the IO-device and its RMRR areas is handled by the
>>     device-driver in the same manner as during a non-kdump boot.
>> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>>     This supports the practice of creating a special kdump kernel without
>>     drivers for any devices that are not required for taking a crashdump.
>> 5. Minimal code-changes among the existing mainline intel vt-d code.
>>
>> Summary of changes in this patch set:
>> 1. Added some useful function for root entry table in code intel-iommu.c
>> 2. Added new members to struct root_entry and struct irte;
>> 3. Functions to load old root entry table to iommu->root_entry from the memory
>>     of old kernel.
>> 4. Functions to malloc new context entry table and page table and copy the data
>>     from the old ones to the malloced new ones.
>> 5. Functions to enable support for DMA remapping in kdump kernel.
>> 6. Functions to load old irte data from the old kernel to the kdump kernel.
>> 7. Some code changes that support other behaviours that have been listed.
>> 8. In the new functions, use physical address as "unsigned long" type, not
>>     pointers.
>>
>> Original version by Bill Sumner:
>>      https://lkml.org/lkml/2014/1/10/518
>>      https://lkml.org/lkml/2014/4/15/716
>>      https://lkml.org/lkml/2014/4/24/836
>>
>> Zhenhua's last of Bill's patchset:
>>      https://lkml.org/lkml/2014/10/21/134
>>      https://lkml.org/lkml/2014/12/15/121
>>
>> Changed in this version:
>> 1. Do not disable and re-enable traslation and interrupt remapping.
>> 2. Use old root entry table.
>> 3. Use old interrupt remapping table.
>> 4. Use "unsigned long" as physical address.
>> 5. Use intel_unmap to unmap the old dma;
>>
>> This patchset should be applied with this one together:
>>      https://lkml.org/lkml/2014/11/5/43
>>      x86/iommu: fix incorrect bit operations in setting values
>>
>> Bill Sumner (5):
>>    iommu/vt-d: Update iommu_attach_domain() and its callers
>>    iommu/vt-d: Items required for kdump
>>    iommu/vt-d: data types and functions used for kdump
>>    iommu/vt-d: Add domain-id functions
>>    iommu/vt-d: enable kdump support in iommu module
>>
>> Li, Zhen-Hua (10):
>>    iommu/vt-d: Update iommu_attach_domain() and its callers
>>    iommu/vt-d: Items required for kdump
>>    iommu/vt-d: Add domain-id functions
>>    iommu/vt-d: functions to copy data from old mem
>>    iommu/vt-d: Add functions to load and save old re
>>    iommu/vt-d: datatypes and functions used for kdump
>>    iommu/vt-d: enable kdump support in iommu module
>>    iommu/vtd: assign new page table for dma_map
>>    iommu/vt-d: Copy functions for irte
>>    iommu/vt-d: Use old irte in kdump kernel
>>
>>   drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>>   drivers/iommu/intel_irq_remapping.c |   99 +++-
>>   include/linux/intel-iommu.h         |   18 +
>>   3 files changed, 1123 insertions(+), 44 deletions(-)
>>
>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-26  6:46   ` Li, ZhenHua
@ 2014-12-26  7:27     ` Takao Indoh
  2014-12-29  3:15       ` Li, ZhenHua
  0 siblings, 1 reply; 21+ messages in thread
From: Takao Indoh @ 2014-12-26  7:27 UTC (permalink / raw)
  To: zhen-hual
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

[-- Attachment #1: Type: text/plain, Size: 9218 bytes --]

On 2014/12/26 15:46, Li, ZhenHua wrote:
> Hi Takao Indoh,
> 
> Thank you very much for your testing. I will add your update in next
> version.
> Also I think a flush for __iommu_update_old_root_entry is also necessary.
> 
> Currently I have no idea about your fault, does it happen before or
> during its loading? Could you send me your full kernel log as an
> attachment?

Sure, see attached file.

I removed 9/10 and 10/10 patches from my kernel to avoid panic problem I
reported in previous mail, and then tested kdump. So please ignore
intr-remap fault message in log file. Also please ignore stack trace
starting with the following message, it's a problem of my box.

  Flags mismatch irq 0. 00000080 (i801_smbus) vs. 00015a00 (timer)

Thanks,
Takao Indoh

> 
> Regards and Merry Christmas.
> Zhenhua
> 
> On 12/26/2014 01:13 PM, Takao Indoh wrote:
>> Hi Zhen-Hua,
>>
>> I tested your patch and found two problems.
>>
>> [1]
>> Kenel panic occurs during 2nd kernel boot.
>>
>> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
>> Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
>> Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
>>   0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
>>   ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
>>   ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
>> Call Trace:
>>   [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
>>   [<ffffffff815b19f1>] panic+0xbb/0x1fa
>>   [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
>>   [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
>>   [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
>>   [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
>>   [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
>>   [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
>>   [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
>>   [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>   [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
>>   [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
>>   [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>> ---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>
>>
>> This panic seems to be related to unflushed cache. I confirmed this
>> problem was fixed by the following patch.
>>
>> --- a/drivers/iommu/intel_irq_remapping.c
>> +++ b/drivers/iommu/intel_irq_remapping.c
>> @@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
>>   	set_64bit(&irte->high, irte_modified->high);
>>   
>>   #ifdef CONFIG_CRASH_DUMP
>> -	if (is_kdump_kernel())
>> +	if (is_kdump_kernel()) {
>>   		__iommu_update_old_irte(iommu, index);
>> +		__iommu_flush_cache(iommu,
>> +			iommu->ir_table->base_old_virt +
>> +			index * sizeof(struct irte),
>> +			sizeof(struct irte));
>> +	}
>>   #endif
>>   	__iommu_flush_cache(iommu, irte, sizeof(*irte));
>>   
>>
>> [2]
>> Some DMAR error messages are still found in 2nd kernel boot.
>>
>> dmar: DRHD: handling fault status reg 2
>> dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
>> DMAR:[fault reason 01] Present bit in root entry is clear
>>
>> I confiremd your commit 1a2262 was already applied. Any idea?
>>
>> Thanks,
>> Takao Indoh
>>
>>
>> On 2014/12/22 18:15, Li, Zhen-Hua wrote:
>>> This patchset is an update of Bill Sumner's patchset, implements a fix for:
>>> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
>>> when a panic happens, the kdump kernel will boot with these faults:
>>>
>>>       dmar: DRHD: handling fault status reg 102
>>>       dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>>>       DMAR:[fault reason 01] Present bit in root entry is clear
>>>
>>>       dmar: DRHD: handling fault status reg 2
>>>       dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>>>       INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>>>
>>> On some system, the interrupt remapping fault will also happen even if the
>>> intel_iommu is not set to on, because the interrupt remapping will be enabled
>>> when x2apic is needed by the system.
>>>
>>> The cause of the DMA fault is described in Bill's original version, and the
>>> INTR-Remap fault is caused by a similar reason. In short, the initialization
>>> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
>>> response.
>>>
>>> To fix this problem, we modifies the behaviors of the intel vt-d in the
>>> crashdump kernel:
>>>
>>> For DMA Remapping:
>>> 1. To accept the vt-d hardware in an active state,
>>> 2. Do not disable and re-enable the translation, keep it enabled.
>>> 3. Use the old root entry table, do not rewrite the RTA register.
>>> 4. Malloc and use new context entry table and page table, copy data from the
>>>      old ones that used by the old kernel.
>>> 5. to use different portions of the iova address ranges for the device drivers
>>>      in the crashdump kernel than the iova ranges that were in-use at the time
>>>      of the panic.
>>> 6. After device driver is loaded, when it issues the first dma_map command,
>>>      free the dmar_domain structure for this device, and generate a new one, so
>>>      that the device can be assigned a new and empty page table.
>>> 7. When a new context entry table is generated, we also save its address to
>>>      the old root entry table.
>>>
>>> For Interrupt Remapping:
>>> 1. To accept the vt-d hardware in an active state,
>>> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
>>> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
>>> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>>>      the updated data will be stored to the old interrupt remapping table.
>>>
>>> Advantages of this approach:
>>> 1. All manipulation of the IO-device is done by the Linux device-driver
>>>      for that device.
>>> 2. This approach behaves in a manner very similar to operation without an
>>>      active iommu.
>>> 3. Any activity between the IO-device and its RMRR areas is handled by the
>>>      device-driver in the same manner as during a non-kdump boot.
>>> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>>>      This supports the practice of creating a special kdump kernel without
>>>      drivers for any devices that are not required for taking a crashdump.
>>> 5. Minimal code-changes among the existing mainline intel vt-d code.
>>>
>>> Summary of changes in this patch set:
>>> 1. Added some useful function for root entry table in code intel-iommu.c
>>> 2. Added new members to struct root_entry and struct irte;
>>> 3. Functions to load old root entry table to iommu->root_entry from the memory
>>>      of old kernel.
>>> 4. Functions to malloc new context entry table and page table and copy the data
>>>      from the old ones to the malloced new ones.
>>> 5. Functions to enable support for DMA remapping in kdump kernel.
>>> 6. Functions to load old irte data from the old kernel to the kdump kernel.
>>> 7. Some code changes that support other behaviours that have been listed.
>>> 8. In the new functions, use physical address as "unsigned long" type, not
>>>      pointers.
>>>
>>> Original version by Bill Sumner:
>>>       https://lkml.org/lkml/2014/1/10/518
>>>       https://lkml.org/lkml/2014/4/15/716
>>>       https://lkml.org/lkml/2014/4/24/836
>>>
>>> Zhenhua's last of Bill's patchset:
>>>       https://lkml.org/lkml/2014/10/21/134
>>>       https://lkml.org/lkml/2014/12/15/121
>>>
>>> Changed in this version:
>>> 1. Do not disable and re-enable traslation and interrupt remapping.
>>> 2. Use old root entry table.
>>> 3. Use old interrupt remapping table.
>>> 4. Use "unsigned long" as physical address.
>>> 5. Use intel_unmap to unmap the old dma;
>>>
>>> This patchset should be applied with this one together:
>>>       https://lkml.org/lkml/2014/11/5/43
>>>       x86/iommu: fix incorrect bit operations in setting values
>>>
>>> Bill Sumner (5):
>>>     iommu/vt-d: Update iommu_attach_domain() and its callers
>>>     iommu/vt-d: Items required for kdump
>>>     iommu/vt-d: data types and functions used for kdump
>>>     iommu/vt-d: Add domain-id functions
>>>     iommu/vt-d: enable kdump support in iommu module
>>>
>>> Li, Zhen-Hua (10):
>>>     iommu/vt-d: Update iommu_attach_domain() and its callers
>>>     iommu/vt-d: Items required for kdump
>>>     iommu/vt-d: Add domain-id functions
>>>     iommu/vt-d: functions to copy data from old mem
>>>     iommu/vt-d: Add functions to load and save old re
>>>     iommu/vt-d: datatypes and functions used for kdump
>>>     iommu/vt-d: enable kdump support in iommu module
>>>     iommu/vtd: assign new page table for dma_map
>>>     iommu/vt-d: Copy functions for irte
>>>     iommu/vt-d: Use old irte in kdump kernel
>>>
>>>    drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>>>    drivers/iommu/intel_irq_remapping.c |   99 +++-
>>>    include/linux/intel-iommu.h         |   18 +
>>>    3 files changed, 1123 insertions(+), 44 deletions(-)
>>>
>>
> 
> 
> 


[-- Attachment #2: log.txt --]
[-- Type: text/plain, Size: 51738 bytes --]


SysRq : Trigger a crash
BUG: unable to handle kernel NULL pointer dereference at           (null)
IP: [<ffffffff8135ef66>] sysrq_handle_crash+0x16/0x20
PGD 238ce6067 PUD 23b268067 PMD 0 
Oops: 0002 [#1] SMP 
Modules linked in: ebtable_nat ebtables xt_CHECKSUM iptable_mangle bridge autofs4 8021q garp stp llc cpufreq_ondemand ipt_REJECT nf_reject_ipv4 nf_conntrack_ipv4 nf_defrag_ipv4 iptable_filter ip_tables ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables ipv6 vhost_net macvtap macvlan vhost tun kvm_intel kvm uinput iTCO_wdt iTCO_vendor_support microcode serio_raw pcspkr ipmi_si ipmi_msghandler tpm_infineon i2c_i801 lpc_ich mfd_core ioatdma i7core_edac edac_core sg igb dca i2c_algo_bit ptp pps_core acpi_cpufreq ext4 jbd2 mbcache mptsas mptscsih mptbase scsi_transport_sas lpfc scsi_transport_fc megaraid_sas dm_mirror dm_region_hash dm_log dm_mod
CPU: 5 PID: 8458 Comm: bash Not tainted 3.18.0 #32
Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
task: ffff88023a934e90 ti: ffff880238dfc000 task.ti: ffff880238dfc000
RIP: 0010:[<ffffffff8135ef66>]  [<ffffffff8135ef66>] sysrq_handle_crash+0x16/0x20
RSP: 0018:ffff880238dffe88  EFLAGS: 00010296
RAX: 000000000000000f RBX: 0000000000000063 RCX: 0000000000000000
RDX: ffff88023fc2ea38 RSI: ffff88023fc2d238 RDI: 0000000000000063
RBP: ffff880238dffe88 R08: 000000000001b78c R09: 0000000000000511
R10: 0000000000000003 R11: 0000000000000510 R12: ffffffff81ac4c20
R13: 0000000000000008 R14: 0000000000000000 R15: 0000000000000001
FS:  00007f1c3fa4b700(0000) GS:ffff88023fc20000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 000000023b2a8000 CR4: 00000000000007e0
Stack:
 ffff880238dffeb8 ffffffff8135f8e1 0000000000000002 fffffffffffffffb
 00007f1c3fa5c000 ffff880238dfff50 ffff880238dffed8 ffffffff8135f97d
 ffff880238dffef8 ffff8800bf004040 ffff880238dffef8 ffffffff81201513
Call Trace:
 [<ffffffff8135f8e1>] __handle_sysrq+0x121/0x180
 [<ffffffff8135f97d>] write_sysrq_trigger+0x3d/0x40
 [<ffffffff81201513>] proc_reg_write+0x43/0x70
 [<ffffffff8119dd2e>] vfs_write+0xce/0x180
 [<ffffffff8119e496>] SyS_write+0x56/0xd0
 [<ffffffff810ecbfc>] ? __audit_syscall_entry+0xac/0x110
 [<ffffffff815b5d12>] system_call_fastpath+0x12/0x17
Code: d1 65 25 00 31 c0 eb ae 90 90 90 90 90 90 90 90 90 90 90 90 90 55 48 89 e5 66 66 66 66 90 c7 05 bd 11 a0 00 01 00 00 00 0f ae f8 <c6> 04 25 00 00 00 00 01 c9 c3 55 48 89 e5 66 66 66 66 90 8d 47 
RIP  [<ffffffff8135ef66>] sysrq_handle_crash+0x16/0x20
 RSP <ffff880238dffe88>
CR2: 0000000000000000
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys cpuacct
Linux version 3.18.0 (root@indowsXP) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #32 SMP Fri Dec 26 16:13:58 JST 2014
Command line: ro root=UUID=bfc88f62-f080-492f-a9f5-17f0c7c6215a rd_NO_LUKS console=ttyS0,115200n8 rd_NO_MD KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_LVM rd_NO_DM intel_iommu=on irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off  memmap=exactmap memmap=627K@4K memmap=130425K@770675K elfcorehdr=901100K memmap=4K$0K memmap=9K$631K memmap=100K$924K memmap=8K$3137080K memmap=52K#3137088K memmap=204K#3137140K memmap=64K$3137344K memmap=8268K$3137460K memmap=262144K$3670016K memmap=4K$4175872K memmap=2048K$4192256K
e820: BIOS-provided physical RAM map:
BIOS-e820: [mem 0x0000000000000100-0x000000000009dbff] usable
BIOS-e820: [mem 0x000000000009dc00-0x000000000009ffff] reserved
BIOS-e820: [mem 0x00000000000e7000-0x00000000000fffff] reserved
BIOS-e820: [mem 0x0000000000100000-0x00000000bf77ffff] usable
BIOS-e820: [mem 0x00000000bf78e000-0x00000000bf78ffff] reserved
BIOS-e820: [mem 0x00000000bf790000-0x00000000bf79cfff] ACPI data
BIOS-e820: [mem 0x00000000bf79d000-0x00000000bf7cffff] ACPI NVS
BIOS-e820: [mem 0x00000000bf7d0000-0x00000000bf7dffff] reserved
BIOS-e820: [mem 0x00000000bf7ed000-0x00000000bfffffff] reserved
BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
BIOS-e820: [mem 0x0000000100000000-0x000000023fffffff] usable
e820: last_pfn = 0x240000 max_arch_pfn = 0x400000000
NX (Execute Disable) protection: active
e820: user-defined physical RAM map:
user: [mem 0x0000000000000000-0x0000000000000fff] reserved
user: [mem 0x0000000000001000-0x000000000009dbff] usable
user: [mem 0x000000000009dc00-0x000000000009ffff] reserved
user: [mem 0x00000000000e7000-0x00000000000fffff] reserved
user: [mem 0x000000002f09cc00-0x0000000036ffafff] usable
user: [mem 0x00000000bf78e000-0x00000000bf78ffff] reserved
user: [mem 0x00000000bf790000-0x00000000bf7cffff] ACPI data
user: [mem 0x00000000bf7d0000-0x00000000bf7dffff] reserved
user: [mem 0x00000000bf7ed000-0x00000000bfffffff] reserved
user: [mem 0x00000000e0000000-0x00000000efffffff] reserved
user: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
user: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
SMBIOS 2.5 present.
AGP: No AGP bridge found
e820: last_pfn = 0x36ffb max_arch_pfn = 0x400000000
PAT configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- UC  
total RAM covered: 8184M
Found optimal setting for mtrr clean up
 gran_size: 64K 	chunk_size: 16M 	num_reg: 5  	lose cover RAM: 0G
found SMP MP-table at [mem 0x000ff780-0x000ff78f] mapped at [ffff8800000ff780]
Using GB pages for direct mapping
init_memory_mapping: [mem 0x00000000-0x000fffff]
init_memory_mapping: [mem 0x36800000-0x369fffff]
init_memory_mapping: [mem 0x34000000-0x367fffff]
init_memory_mapping: [mem 0x2f09d000-0x33ffffff]
init_memory_mapping: [mem 0x36a00000-0x36ffafff]
RAMDISK: [mem 0x36ab6000-0x36feefff]
ACPI: Early table checksum verification disabled
ACPI: RSDP 0x00000000000FAA50 000024 (v02 ACPIAM)
ACPI: XSDT 0x00000000BF790100 000094 (v01 AAA             20120210 MSFT 00000097)
ACPI: FACP 0x00000000BF790290 0000F4 (v04 021012 FACP1717 20120210 MSFT 00000097)
ACPI BIOS Warning (bug): 32/64X length mismatch in FADT/Gpe0Block: 128/64 (20141107/tbfadt-618)
ACPI: DSDT 0x00000000BF7906F0 00712B (v02 TU1O   TU1O3D81 00003D81 INTL 20051117)
ACPI: FACS 0x00000000BF79D000 000040
ACPI: APIC 0x00000000BF790390 00011E (v02 021012 APIC1717 20120210 MSFT 00000097)
ACPI: SPCR 0x00000000BF7904B0 000050 (v01 021012 SPCR1717 20120210 MSFT 00000097)
ACPI: MCFG 0x00000000BF790500 00003C (v01 021012 OEMMCFG  20120210 MSFT 00000097)
ACPI: SLIT 0x00000000BF790540 000030 (v01 021012 OEMSLIT  20120210 MSFT 00000097)
ACPI: SLIC 0x00000000BF790570 000176 (v01 AAA             20120210 MSFT 00000097)
ACPI: SRAT 0x00000000BF79A6F0 0001D0 (v02 021012 OEMSRAT  00000001 INTL 00000001)
ACPI: HPET 0x00000000BF79A8C0 000038 (v01 021012 OEMHPET  20120210 MSFT 00000097)
ACPI: DMAR 0x00000000BF79D0E0 000140 (v01 AMI    OEMDMAR  00000001 MSFT 00000097)
ACPI: SSDT 0x00000000BF79F9A0 000363 (v01 DpgPmm CpuPm    00000012 INTL 20051117)
ACPI: EINJ 0x00000000BF79A900 000130 (v01 AMIER  AMI_EINJ 20120210 MSFT 00000097)
ACPI: BERT 0x00000000BF79AA90 000030 (v01 AMIER  AMI_BERT 20120210 MSFT 00000097)
ACPI: ERST 0x00000000BF79AAC0 0001B0 (v01 AMIER  AMI_ERST 20120210 MSFT 00000097)
ACPI: HEST 0x00000000BF79AC70 0000A8 (v01 AMIER  ABC_HEST 20120210 MSFT 00000097)
SRAT: PXM 0 -> APIC 0x00 -> Node 0
SRAT: PXM 0 -> APIC 0x02 -> Node 0
SRAT: PXM 0 -> APIC 0x12 -> Node 0
SRAT: PXM 0 -> APIC 0x14 -> Node 0
SRAT: PXM 0 -> APIC 0x01 -> Node 0
SRAT: PXM 0 -> APIC 0x03 -> Node 0
SRAT: PXM 0 -> APIC 0x13 -> Node 0
SRAT: PXM 0 -> APIC 0x15 -> Node 0
SRAT: PXM 1 -> APIC 0x20 -> Node 1
SRAT: PXM 1 -> APIC 0x22 -> Node 1
SRAT: PXM 1 -> APIC 0x32 -> Node 1
SRAT: PXM 1 -> APIC 0x34 -> Node 1
SRAT: PXM 1 -> APIC 0x21 -> Node 1
SRAT: PXM 1 -> APIC 0x23 -> Node 1
SRAT: PXM 1 -> APIC 0x33 -> Node 1
SRAT: PXM 1 -> APIC 0x35 -> Node 1
SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]
SRAT: Node 0 PXM 0 [mem 0x00100000-0xbfffffff]
SRAT: Node 0 PXM 0 [mem 0x100000000-0x13fffffff]
SRAT: Node 1 PXM 1 [mem 0x140000000-0x23fffffff]
NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x36ffafff] -> [mem 0x00000000-0x36ffafff]
NODE_DATA(0) allocated [mem 0x36a90000-0x36ab5fff]
Zone ranges:
  DMA      [mem 0x00001000-0x00ffffff]
  DMA32    [mem 0x01000000-0x36ffafff]
  Normal   empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x00001000-0x0009cfff]
  node   0: [mem 0x2f09d000-0x36ffafff]
Initmem setup node 0 [mem 0x00001000-0x36ffafff]
ACPI: PM-Timer IO Port: 0x808
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 almost reached. Keeping one slot for boot cpu.  Processor 0/0x0 ignored.
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 almost reached. Keeping one slot for boot cpu.  Processor 1/0x2 ignored.
ACPI: LAPIC (acpi_id[0x03] lapic_id[0x12] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 almost reached. Keeping one slot for boot cpu.  Processor 2/0x12 ignored.
ACPI: LAPIC (acpi_id[0x04] lapic_id[0x14] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 almost reached. Keeping one slot for boot cpu.  Processor 3/0x14 ignored.
ACPI: LAPIC (acpi_id[0x05] lapic_id[0x20] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 almost reached. Keeping one slot for boot cpu.  Processor 4/0x20 ignored.
ACPI: LAPIC (acpi_id[0x06] lapic_id[0x22] enabled)
ACPI: LAPIC (acpi_id[0x07] lapic_id[0x32] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 6/0x32 ignored.
ACPI: LAPIC (acpi_id[0x08] lapic_id[0x34] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 7/0x34 ignored.
ACPI: LAPIC (acpi_id[0x09] lapic_id[0x01] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 8/0x1 ignored.
ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x03] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 9/0x3 ignored.
ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x13] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 10/0x13 ignored.
ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x15] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 11/0x15 ignored.
ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x21] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 12/0x21 ignored.
ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x23] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 13/0x23 ignored.
ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x33] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 14/0x33 ignored.
ACPI: LAPIC (acpi_id[0x10] lapic_id[0x35] enabled)
ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 15/0x35 ignored.
ACPI: LAPIC (acpi_id[0x11] lapic_id[0x90] disabled)
ACPI: LAPIC (acpi_id[0x12] lapic_id[0x91] disabled)
ACPI: LAPIC (acpi_id[0x13] lapic_id[0x92] disabled)
ACPI: LAPIC (acpi_id[0x14] lapic_id[0x93] disabled)
ACPI: LAPIC (acpi_id[0x15] lapic_id[0x94] disabled)
ACPI: LAPIC (acpi_id[0x16] lapic_id[0x95] disabled)
ACPI: LAPIC (acpi_id[0x17] lapic_id[0x96] disabled)
ACPI: LAPIC (acpi_id[0x18] lapic_id[0x97] disabled)
ACPI: LAPIC_NMI (acpi_id[0xff] high dfl lint[0x1])
ACPI: IOAPIC (id[0x06] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 6, version 32, address 0xfec00000, GSI 0-23
ACPI: IOAPIC (id[0x07] address[0xfec8a000] gsi_base[24])
IOAPIC[1]: apic_id 7, version 32, address 0xfec8a000, GSI 24-47
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
Using ACPI (MADT) for SMP configuration information
ACPI: HPET id: 0x8086a301 base: 0xfed00000
smpboot: 24 Processors exceeds NR_CPUS limit of 1
smpboot: Allowing 1 CPUs, 0 hotplug CPUs
PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
PM: Registered nosave memory: [mem 0x0009d000-0x0009dfff]
PM: Registered nosave memory: [mem 0x0009e000-0x0009ffff]
PM: Registered nosave memory: [mem 0x000a0000-0x000e6fff]
PM: Registered nosave memory: [mem 0x000e7000-0x000fffff]
PM: Registered nosave memory: [mem 0x00100000-0x2f09cfff]
e820: [mem 0x36ffb000-0xbf78dfff] available for PCI devices
setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:2
PERCPU: Embedded 29 pages/cpu @ffff880036600000 s80640 r8192 d29952 u2097152
Built 1 zonelists in Node order, mobility grouping on.  Total pages: 32291
Policy zone: DMA32
Kernel command line: ro root=UUID=bfc88f62-f080-492f-a9f5-17f0c7c6215a rd_NO_LUKS console=ttyS0,115200n8 rd_NO_MD KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_LVM rd_NO_DM intel_iommu=on irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off  memmap=exactmap memmap=627K@4K memmap=130425K@770675K elfcorehdr=901100K memmap=4K$0K memmap=9K$631K memmap=100K$924K memmap=8K$3137080K memmap=52K#3137088K memmap=204K#3137140K memmap=64K$3137344K memmap=8268K$3137460K memmap=262144K$3670016K memmap=4K$4175872K memmap=2048K$4192256K
Intel-IOMMU: enabled
Misrouted IRQ fixup and polling support enabled
This may significantly impact system performance
PID hash table entries: 512 (order: 0, 4096 bytes)
AGP: Checking aperture...
AGP: No AGP bridge found
Memory: 101572K/131048K available (5866K kernel code, 1198K rwdata, 2844K rodata, 1748K init, 2104K bss, 29476K reserved)
Hierarchical RCU implementation.
	RCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
NR_IRQS:524544 nr_irqs:256 0
Spurious LAPIC timer interrupt on cpu 0
Console: colour dummy device 80x25
console [ttyS0] enabled
tsc: Fast TSC calibration using PIT
tsc: Detected 2133.444 MHz processor
Calibrating delay loop (skipped), value calculated using timer frequency.. 4266.88 BogoMIPS (lpj=2133444)
pid_max: default: 32768 minimum: 301
ACPI: Core revision 20141107
ACPI: All ACPI Tables successfully acquired
Security Framework initialized
SELinux:  Initializing.
Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys net_cls
Initializing cgroup subsys blkio
Initializing cgroup subsys perf_event
CPU: Physical Processor ID: 1
CPU: Processor Core ID: 1
Last level iTLB entries: 4KB 512, 2MB 7, 4MB 7
Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32, 1GB 0
Freeing SMP alternatives memory: 20K (ffffffff81ce2000 - ffffffff81ce7000)
ftrace: allocating 23897 entries in 94 pages
dmar: Host address width 40
dmar: DRHD base: 0x000000fbffe000 flags: 0x1
dmar: IOMMU 0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f0207e
dmar: RMRR base: 0x000000000e7000 end: 0x000000000e9fff
dmar: RMRR base: 0x000000bf7ed000 end: 0x000000bf7fffff
dmar: ATSR flags: 0x0
IOAPIC id 6 under DRHD base  0xfbffe000 IOMMU 0
IOAPIC id 7 under DRHD base  0xfbffe000 IOMMU 0
Enabled IRQ remapping in xapic mode
..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
smpboot: CPU0: Intel(R) Xeon(R) CPU           L5630  @ 2.13GHz (fam: 06, model: 2c, stepping: 02)
Performance Events: PEBS fmt1+, 16-deep LBR, Westmere events, Broken BIOS detected, complain to your hardware vendor.
[Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 38d is b0)
Intel PMU driver.
perf_event_intel: CPUID marked event: 'bus cycles' unavailable
... version:                3
... bit width:              48
... generic registers:      4
... value mask:             0000ffffffffffff
... max period:             000000007fffffff
... fixed-purpose events:   3
... event mask:             000000070000000f
x86: Booted up 1 node, 1 CPUs
smpboot: Total of 1 processors activated (4266.88 BogoMIPS)
NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
devtmpfs: initialized
NET: Registered protocol family 16
cpuidle: using governor ladder
cpuidle: using governor menu
ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
ACPI: bus type PCI registered
acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
PCI: Using configuration type 1 for base access
ACPI: Added _OSI(Module Device)
ACPI: Added _OSI(Processor Device)
ACPI: Added _OSI(3.0 _SCP Extensions)
ACPI: Added _OSI(Processor Aggregator Device)
ACPI: Executed 1 blocks of module-level executable AML code
dmar: DRHD: handling fault status reg 2
dmar: INTR-REMAP: Request device [[01:00.0] fault index 34
INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
ACPI: Interpreter enabled
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20141107/hwxface-580)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S3_] (20141107/hwxface-580)
ACPI: (supports S0 S1 S4 S5)
ACPI: Using IOAPIC for interrupt routing
HEST: Table parsing has been initialized.
PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
acpi PNP0A08:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
acpi PNP0A08:00: ignoring host bridge window [mem 0x000d0000-0x000dffff] (conflicts with Adapter ROM [mem 0x000ce800-0x000d4fff])
PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [bus 00-ff]
pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7]
pci_bus 0000:00: root bus resource [io  0x0d00-0xffff]
pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
pci_bus 0000:00: root bus resource [mem 0xc0000000-0xdfffffff]
pci_bus 0000:00: root bus resource [mem 0xf0000000-0xfed8ffff]
pci 0000:00:01.0: System wakeup disabled by ACPI
pci 0000:00:02.0: System wakeup disabled by ACPI
pci 0000:00:03.0: System wakeup disabled by ACPI
pci 0000:00:07.0: System wakeup disabled by ACPI
pci 0000:00:08.0: System wakeup disabled by ACPI
pci 0000:00:09.0: System wakeup disabled by ACPI
pci 0000:00:0a.0: System wakeup disabled by ACPI
pci 0000:00:1a.0: System wakeup disabled by ACPI
pci 0000:00:1a.1: System wakeup disabled by ACPI
pci 0000:00:1a.2: System wakeup disabled by ACPI
pci 0000:00:1a.7: System wakeup disabled by ACPI
pci 0000:00:1c.0: System wakeup disabled by ACPI
pci 0000:00:1d.0: System wakeup disabled by ACPI
pci 0000:00:1d.1: System wakeup disabled by ACPI
pci 0000:00:1d.2: System wakeup disabled by ACPI
pci 0000:00:1d.7: System wakeup disabled by ACPI
pci 0000:00:1e.0: System wakeup disabled by ACPI
pci 0000:01:00.0: System wakeup disabled by ACPI
pci 0000:01:00.1: System wakeup disabled by ACPI
pci 0000:00:01.0: PCI bridge to [bus 01]
pci 0000:02:00.0: System wakeup disabled by ACPI
pci 0000:02:00.1: System wakeup disabled by ACPI
pci 0000:00:02.0: PCI bridge to [bus 02]
pci 0000:00:03.0: PCI bridge to [bus 03]
pci 0000:00:07.0: PCI bridge to [bus 10]
pci 0000:00:08.0: PCI bridge to [bus 20]
pci 0000:00:09.0: PCI bridge to [bus 30]
pci 0000:00:0a.0: PCI bridge to [bus 40]
pci 0000:00:1c.0: PCI bridge to [bus 50]
pci 0000:00:1c.4: PCI bridge to [bus 60]
pci 0000:00:1e.0: PCI bridge to [bus 61] (subtractive decode)
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 *10 11 12 14 15), disabled.
ACPI: PCI Interrupt Link [LNKB] (IRQs *5), disabled.
ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 *11 12 14 15), disabled.
ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 11 12 14 *15), disabled.
ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 6 7 10 11 12 *14 15), disabled.
ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 6 7 10 11 12 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKH] (IRQs *3 4 6 7 10 11 12 14 15), disabled.
ACPI: Enabled 2 GPEs in block 00 to 3F
vgaarb: setting as boot device: PCI:0000:60:00.0
vgaarb: device added: PCI:0000:60:00.0,decodes=io+mem,owns=io+mem,locks=none
vgaarb: loaded
vgaarb: bridge control possible 0000:60:00.0
SCSI subsystem initialized
ACPI: bus type USB registered
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
PCI: Using ACPI for IRQ routing
PCI: Discovered peer bus fe
PCI host bridge to bus 0000:fe
pci_bus 0000:fe: root bus resource [io  0x0000-0xffff]
pci_bus 0000:fe: root bus resource [mem 0x00000000-0xffffffffff]
pci_bus 0000:fe: No busn resource found for root bus, will use [bus fe-ff]
PCI: Discovered peer bus ff
PCI host bridge to bus 0000:ff
pci_bus 0000:ff: root bus resource [io  0x0000-0xffff]
pci_bus 0000:ff: root bus resource [mem 0x00000000-0xffffffffff]
pci_bus 0000:ff: No busn resource found for root bus, will use [bus ff-ff]
NetLabel: Initializing
NetLabel:  domain hash size = 128
NetLabel:  protocols = UNLABELED CIPSOv4
NetLabel:  unlabeled traffic allowed by default
hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0
hpet0: 4 comparators, 64-bit 14.318180 MHz counter
Switched to clocksource hpet
pnp: PnP ACPI init
system 00:00: [mem 0xfbf00000-0xfbffffff] could not be reserved
system 00:00: [mem 0xfc000000-0xfcffffff] has been reserved
system 00:00: [mem 0xfd000000-0xfdffffff] has been reserved
system 00:00: [mem 0xfe000000-0xfebfffff] has been reserved
system 00:00: [mem 0xfec8a000-0xfec8afff] could not be reserved
system 00:00: [mem 0xfed10000-0xfed10fff] has been reserved
system 00:04: [io  0x0ca0-0x0ca1] has been reserved
system 00:04: [io  0x0ca4-0x0ca7] has been reserved
system 00:04: [io  0x0caa-0x0caf] has been reserved
system 00:04: [io  0x04d0-0x04d1] has been reserved
system 00:04: [io  0x0800-0x087f] has been reserved
system 00:04: [io  0x0500-0x057f] has been reserved
system 00:04: [mem 0xfed1c000-0xfed1ffff] has been reserved
system 00:04: [mem 0xfed20000-0xfed3ffff] has been reserved
system 00:04: [mem 0xfed40000-0xfed8ffff] has been reserved
system 00:05: [mem 0xfec00000-0xfec00fff] could not be reserved
system 00:05: [mem 0xfee00000-0xfee00fff] has been reserved
system 00:07: [mem 0xe0000000-0xefffffff] has been reserved
system 00:08: [mem 0x00000000-0x0009ffff] could not be reserved
system 00:08: [mem 0x000e0000-0x000fffff] could not be reserved
system 00:08: [mem 0x00100000-0xbfffffff] could not be reserved
system 00:08: [mem 0xfed90000-0xffffffff] could not be reserved
pnp: PnP ACPI: found 9 devices
pci 0000:00:01.0: PCI bridge to [bus 01]
pci 0000:00:01.0:   bridge window [io  0xa000-0xafff]
pci 0000:00:01.0:   bridge window [mem 0xfa800000-0xfa8fffff]
pci 0000:00:02.0: PCI bridge to [bus 02]
pci 0000:00:02.0:   bridge window [io  0xb000-0xbfff]
pci 0000:00:02.0:   bridge window [mem 0xfa900000-0xfa9fffff]
pci 0000:00:03.0: PCI bridge to [bus 03]
pci 0000:00:03.0:   bridge window [io  0xc000-0xcfff]
pci 0000:00:03.0:   bridge window [mem 0xfaa00000-0xfaafffff]
pci 0000:00:03.0:   bridge window [mem 0xc0000000-0xc01fffff 64bit pref]
pci 0000:00:07.0: PCI bridge to [bus 10]
pci 0000:00:08.0: PCI bridge to [bus 20]
pci 0000:00:09.0: PCI bridge to [bus 30]
pci 0000:00:09.0:   bridge window [io  0xd000-0xdfff]
pci 0000:00:09.0:   bridge window [mem 0xfab00000-0xfabfffff]
pci 0000:00:0a.0: PCI bridge to [bus 40]
pci 0000:00:1c.0: PCI bridge to [bus 50]
pci 0000:00:1c.0:   bridge window [io  0xe000-0xefff]
pci 0000:00:1c.0:   bridge window [mem 0xfac00000-0xfaffffff]
pci 0000:00:1c.0:   bridge window [mem 0xc0200000-0xc03fffff 64bit pref]
pci 0000:60:00.0: BAR 6: assigned [mem 0xfb800000-0xfb80ffff pref]
pci 0000:00:1c.4: PCI bridge to [bus 60]
pci 0000:00:1c.4:   bridge window [io  0x1000-0x1fff]
pci 0000:00:1c.4:   bridge window [mem 0xfb000000-0xfbefffff]
pci 0000:00:1c.4:   bridge window [mem 0xf9000000-0xf9ffffff 64bit pref]
pci 0000:00:1e.0: PCI bridge to [bus 61]
NET: Registered protocol family 2
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP: reno registered
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
NET: Registered protocol family 1
pci 0000:01:00.0: Disabling L0s
pci 0000:01:00.0: can't disable ASPM; OS doesn't have ASPM control
pci 0000:01:00.1: Disabling L0s
pci 0000:01:00.1: can't disable ASPM; OS doesn't have ASPM control
pci 0000:02:00.0: Disabling L0s
pci 0000:02:00.0: can't disable ASPM; OS doesn't have ASPM control
pci 0000:02:00.1: Disabling L0s
pci 0000:02:00.1: can't disable ASPM; OS doesn't have ASPM control
Trying to unpack rootfs image as initramfs...
Freeing initrd memory: 5348K (ffff880036ab6000 - ffff880036fef000)
IOMMU Skip disabling iommu hardware translations
IOMMU Copying translate tables from panicked kernel
IOMMU: root_cache:0xffff880033ed5000 phys:0x0000b9d9e000
IOMMU:0 Domain ids from panicked kernel:
DID did:12(0x000c)
DID did:11(0x000b)
DID did:10(0x000a)
DID did:9(0x0009)
DID did:24(0x0018)
DID did:23(0x0017)
DID did:22(0x0016)
DID did:21(0x0015)
DID did:8(0x0008)
DID did:7(0x0007)
DID did:6(0x0006)
DID did:5(0x0005)
DID did:4(0x0004)
DID did:3(0x0003)
DID did:2(0x0002)
DID did:1(0x0001)
DID did:0(0x0000)
DID did:20(0x0014)
DID did:19(0x0013)
DID did:18(0x0012)
DID did:17(0x0011)
DID did:16(0x0010)
DID did:15(0x000f)
DID did:14(0x000e)
DID did:13(0x000d)
----------------------------------------
IOMMU: dmar0 using Queued invalidation
PCI-DMA: Intel(R) Virtualization Technology for Directed I/O
futex hash table entries: 256 (order: 2, 16384 bytes)
audit: initializing netlink subsys (disabled)
audit: type=2000 audit(1419578424.288:1): initialized
HugeTLB registered 2 MB page size, pre-allocated 0 pages
VFS: Disk quotas dquot_6.5.2
VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
bounce: pool size: 64 pages
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
ioapic: probe of 0000:00:13.0 failed with error -22
pci_hotplug: PCI Hot Plug PCI Core version: 0.5
pciehp: PCI Express Hot Plug Controller Driver version: 0.4
input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
ACPI: Power Button [PWRB]
input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
ACPI: Power Button [PWRF]
APEI: Can not request [mem 0xbf7b3d3a-0xbf7b3d3b] for APEI ERST registers
[Firmware Warn]: GHES: Poll interval is 0 for generic hardware error source: 1, disabled.
GHES: APEI firmware first mode is enabled by WHEA _OSC.
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
serial 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
Non-volatile memory driver v1.3
Linux agpgart interface v0.103
brd: module loaded
loop: module loaded
libphy: Fixed MDIO Bus: probed
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
ehci-pci 0000:00:1a.7: EHCI Host Controller
ehci-pci 0000:00:1a.7: new USB bus registered, assigned bus number 1
ehci-pci 0000:00:1a.7: debug port 1
ehci-pci 0000:00:1a.7: irq 18, io mem 0xfa7de000
ehci-pci 0000:00:1a.7: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 3.18.0 ehci_hcd
usb usb1: SerialNumber: 0000:00:1a.7
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 6 ports detected
ehci-pci 0000:00:1d.7: EHCI Host Controller
ehci-pci 0000:00:1d.7: new USB bus registered, assigned bus number 2
ehci-pci 0000:00:1d.7: debug port 1
ehci-pci 0000:00:1d.7: irq 23, io mem 0xfa7dc000
ehci-pci 0000:00:1d.7: USB 2.0 started, EHCI 1.00
usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: EHCI Host Controller
usb usb2: Manufacturer: Linux 3.18.0 ehci_hcd
usb usb2: SerialNumber: 0000:00:1d.7
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 6 ports detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
ohci-pci: OHCI PCI platform driver
uhci_hcd: USB Universal Host Controller Interface driver
uhci_hcd 0000:00:1a.0: UHCI Host Controller
uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1a.0: detected 2 ports
uhci_hcd 0000:00:1a.0: irq 16, io base 0x00009c00
dmar: DRHD: handling fault status reg 102
dmar: DMAR:[DMA Read] Request device [00:1a.0] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1a.0: host system error, PCI problems?
uhci_hcd 0000:00:1a.0: host controller halted, very bad!
uhci_hcd 0000:00:1a.0: HC died; cleaning up
uhci_hcd 0000:00:1a.0: USB bus 3 deregistered
uhci_hcd 0000:00:1a.0: init 0000:00:1a.0 fail, -108
uhci_hcd: probe of 0000:00:1a.0 failed with error -108
uhci_hcd 0000:00:1a.1: UHCI Host Controller
uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1a.1: detected 2 ports
uhci_hcd 0000:00:1a.1: irq 21, io base 0x00009880
dmar: DRHD: handling fault status reg 202
dmar: DMAR:[DMA Read] Request device [00:1a.1] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1a.1: host system error, PCI problems?
uhci_hcd 0000:00:1a.1: host controller halted, very bad!
uhci_hcd 0000:00:1a.1: HC died; cleaning up
uhci_hcd 0000:00:1a.1: USB bus 3 deregistered
uhci_hcd 0000:00:1a.1: init 0000:00:1a.1 fail, -108
uhci_hcd: probe of 0000:00:1a.1 failed with error -108
uhci_hcd 0000:00:1a.2: UHCI Host Controller
uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1a.2: detected 2 ports
uhci_hcd 0000:00:1a.2: irq 19, io base 0x00009800
dmar: DRHD: handling fault status reg 302
dmar: DMAR:[DMA Read] Request device [00:1a.2] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1a.2: host system error, PCI problems?
uhci_hcd 0000:00:1a.2: host controller halted, very bad!
uhci_hcd 0000:00:1a.2: HC died; cleaning up
uhci_hcd 0000:00:1a.2: USB bus 3 deregistered
uhci_hcd 0000:00:1a.2: init 0000:00:1a.2 fail, -108
uhci_hcd: probe of 0000:00:1a.2 failed with error -108
uhci_hcd 0000:00:1d.0: UHCI Host Controller
uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1d.0: detected 2 ports
uhci_hcd 0000:00:1d.0: irq 23, io base 0x00009480
dmar: DRHD: handling fault status reg 402
dmar: DMAR:[DMA Read] Request device [00:1d.0] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1d.0: host system error, PCI problems?
uhci_hcd 0000:00:1d.0: host controller halted, very bad!
uhci_hcd 0000:00:1d.0: HC died; cleaning up
usb 1-2: new high-speed USB device number 2 using ehci-pci
uhci_hcd 0000:00:1d.0: USB bus 3 deregistered
dmar: DRHD: handling fault status reg 502
dmar: DMAR:[DMA Read] Request device [00:1a.7] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
ehci-pci 0000:00:1a.7: fatal error
ehci-pci 0000:00:1a.7: HC died; cleaning up
uhci_hcd 0000:00:1d.0: init 0000:00:1d.0 fail, -108
uhci_hcd: probe of 0000:00:1d.0 failed with error -108
uhci_hcd 0000:00:1d.1: UHCI Host Controller
uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1d.1: detected 2 ports
uhci_hcd 0000:00:1d.1: irq 19, io base 0x00009400
dmar: DRHD: handling fault status reg 602
dmar: DMAR:[DMA Read] Request device [00:1d.1] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1d.1: host system error, PCI problems?
uhci_hcd 0000:00:1d.1: host controller halted, very bad!
uhci_hcd 0000:00:1d.1: HC died; cleaning up
uhci_hcd 0000:00:1d.1: USB bus 3 deregistered
uhci_hcd 0000:00:1d.1: init 0000:00:1d.1 fail, -108
uhci_hcd: probe of 0000:00:1d.1 failed with error -108
uhci_hcd 0000:00:1d.2: UHCI Host Controller
uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1d.2: detected 2 ports
uhci_hcd 0000:00:1d.2: irq 18, io base 0x00009080
dmar: DRHD: handling fault status reg 702
dmar: DMAR:[DMA Read] Request device [00:1d.2] fault addr fffff000 
DMAR:[fault reason 01] Present bit in root entry is clear
uhci_hcd 0000:00:1d.2: host system error, PCI problems?
uhci_hcd 0000:00:1d.2: host controller halted, very bad!
uhci_hcd 0000:00:1d.2: HC died; cleaning up
uhci_hcd 0000:00:1d.2: USB bus 3 deregistered
uhci_hcd 0000:00:1d.2: init 0000:00:1d.2 fail, -108
uhci_hcd: probe of 0000:00:1d.2 failed with error -108
i8042: PNP: No PS/2 controller found. Probing ports directly.
dmar: DRHD: handling fault status reg 2
dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffcd3000 
DMAR:[fault reason 01] Present bit in root entry is clear
i8042: Failed to disable AUX port, but continuing anyway... Is this a SiS?
i8042: If AUX port is really absent please use the 'i8042.noaux' option
dmar: DRHD: handling fault status reg 102
dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr fffe4000 
DMAR:[fault reason 01] Present bit in root entry is clear
sched: RT throttling activated
serio: i8042 KBD port at 0x60,0x64 irq 1
mousedev: PS/2 mouse device common for all mice
rtc_cmos 00:01: RTC can wake from S4
rtc_cmos 00:01: rtc core: registered rtc_cmos as rtc0
rtc_cmos 00:01: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
hidraw: raw HID events driver (C) Jiri Kosina
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
drop_monitor: Initializing network drop monitor service
TCP: cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
mce: Unable to init device /dev/mcelog (rc: -5)
registered taskstats version 1
ima: No TPM chip found, activating TPM-bypass!
rtc_cmos 00:01: setting system clock to 2014-12-26 07:20:33 UTC (1419578433)
Freeing unused kernel memory: 1748K (ffffffff81b2d000 - ffffffff81ce2000)
Write protecting the kernel read-only data: 10240k
Freeing unused kernel memory: 264K (ffff8800305be000 - ffff880030600000)
Freeing unused kernel memory: 1252K (ffff8800308c7000 - ffff880030a00000)
Mounting proc filesystem
Mounting sysfs filesystem
Creating /dev
Creating initial device nodes
setfont: KDFONTOP: Inappropridevice-mapper: uevent: version 1.0.3
ate ioctl for dedevice-mapper: ioctl: 4.29.0-ioctl (2014-10-28) initialised: dm-devel@redhat.com
vice
Free memory/Total memory (free %): 77336 / 110204 ( 70.1753 )
Loading dm-mod.ko module
Lip_tables: (C) 2000-2006 Netfilter Core Team
oading dm-log.ko module
Loadingnf_conntrack version 0.5.0 (860 buckets, 3440 max)
 dm-region-hash.ip6_tables: (C) 2000-2006 Netfilter Core Team
ko module
Loading dm-mirror.ko module
Loading dm-zero.ko modulNET: Registered protocol family 10
e
Loading dm-bufio.ko module
Loading dm-snapshtun: Universal TUN/TAP device driver, 1.6
ot.ko module
Lotun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
ading cpufreq_ondemand.ko module
Loading nf_reject_ipv4.ko module
Loading nf_diTCO_vendor_support: vendor-support=0
efrag_ipv4.ko module
Loading ipinput: PC Speaker as /devices/platform/pcspkr/input/input3
_tables.ko module
Loading nf_coipmi message handler version 39.2
nntrack.ko module
Loading ip6_tgenirq: Flags mismatch irq 0. 00000080 (i801_smbus) vs. 00015a00 (timer)
CPU: 0 PID: 142 Comm: insmod Not tainted 3.18.0 #32
Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
 ffff880033ee8bc0 ffff880033487a48 ffffffff815b1bda 0000000000015a00
 ffff88003603d600 ffff880033487aa8 ffffffff810a8d0c ffff880033487a98
 0000000000000246 ffff880033487aa8 ffff880033541000 ffff88003603d600
Call Trace:
 [<ffffffff815b1bda>] dump_stack+0x48/0x5e
 [<ffffffff810a8d0c>] __setup_irq+0x39c/0x4f0
 [<ffffffff810a9680>] request_threaded_irq+0x100/0x170
 [<ffffffffa0194c30>] ? dmi_check_onboard_devices+0x1a0/0x1a0 [i2c_i801]
 [<ffffffffa0194964>] i801_probe+0x4b4/0x5e0 [i2c_i801]
 [<ffffffff815b3e66>] ? mutex_lock+0x16/0x40
 [<ffffffff812d175c>] local_pci_probe+0x4c/0xb0
 [<ffffffff812d1849>] pci_call_probe+0x89/0xb0
 [<ffffffff812d169e>] ? pci_match_device+0xde/0x110
 [<ffffffff812d1b29>] pci_device_probe+0x79/0xa0
 [<ffffffff8139b0f2>] ? driver_sysfs_add+0x82/0xb0
 [<ffffffff8139b371>] really_probe+0x81/0x350
 [<ffffffff8139b687>] driver_probe_device+0x47/0xa0
 [<ffffffff8139b78b>] __driver_attach+0xab/0xb0
 [<ffffffff8139b6e0>] ? driver_probe_device+0xa0/0xa0
 [<ffffffff8139b6e0>] ? driver_probe_device+0xa0/0xa0
 [<ffffffff81399564>] bus_for_each_dev+0x94/0xb0
 [<ffffffff8139b01e>] driver_attach+0x1e/0x20
 [<ffffffff8139aa80>] bus_add_driver+0x1b0/0x250
 [<ffffffff8139be24>] driver_register+0x64/0xf0
 [<ffffffff812d1c1c>] __pci_register_driver+0x4c/0x50
 [<ffffffffa01990a5>] i2c_i801_init+0xa5/0x1000 [i2c_i801]
 [<ffffffffa0199000>] ? 0xffffffffa0199000
 [<ffffffff81000287>] do_one_initcall+0xb7/0x1d0
 [<ffffffff81175412>] ? __vunmap+0xc2/0x110
 [<ffffffff810cf790>] do_init_module+0x30/0x1a0
 [<ffffffff810d1f70>] load_module+0x500/0x630
 [<ffffffff810cf050>] ? __unlink_module+0x30/0x30
 [<ffffffff81175cb5>] ? __vmalloc_node+0x35/0x40
 [<ffffffff810ce650>] ? module_sect_show+0x30/0x30
 [<ffffffff810d2224>] SyS_init_module+0x94/0xc0
 [<ffffffff815b5d12>] system_call_fastpath+0x12/0x17
ables.ko module\ri801_smbus 0000:00:1f.3: Failed to allocate irq 0: -16

Loading ipv6.koi801_smbus 0000:00:1f.3: SMBus using polling
 module
Loading macvlan.ko moduEDAC MC: Ver: 3.0.0
le
Loading vhost.ko module
Loadca service started, version 1.12.1
ding tun.ko module
Loading kvm.pps_core: LinuxPPS API ver. 1 registered
ko module
Loadipps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
ng uinput.ko module
Loading iTCO_vendor_support.ko module
LoadFusion MPT base driver 3.04.20
ing serio_raw.koCopyright (c) 1999-2008 LSI Corporation
 module
Loading pcspkr.ko module
Loading ipmi_msghandler.ko module
Loading tpmegasas: 06.805.06.01-rc1
m_infineon.ko momegasas: 0x1000:0x0079:0x1734:0x1176: dule
Loading i2bus 3:slot 0:func 0
c-i801.ko modulemegaraid_sas 0000:03:00.0: Can't allocate Firmware crash dump DMA buffer

Loading mfd-comegasas: Waiting for FW to come to ready state
re.ko module
Loading edac_core.ko module
Loading sg.ko module
Loading dca.ko module
Loading i2c-algo-bit.ko module
Loading pps_core.ko module
Loading acpi-cpufreq.ko modudmar: DRHD: handling fault status reg 202
dmar: DMAR:[DMA Write] Request device [03:00.0] fault addr ffdfe000 
DMAR:[fault reason 05] PTE Write access is not set
le
insmod: can'megasas: FW now in Ready state
t insert '/lib/mmegaraid_sas 0000:03:00.0: [scsi0]: FW supports<0> MSIX vector,Online CPUs: <1>,Current MSIX <1>
odules/3.18.0/acpi-cpufreq.ko': No such device
Loading jbd2.ko module
Loading mbcache.ko module
Loading mptbase.ko module
Loading scsi_transport_sas.ko module
Loading scsi_transport_fc.ko module
Loading megaraid_sas.ko module
megasas_init_mfi: fw_support_ieee=0
megasas: INIT adapter done
megaraid_sas 0000:03:00.0: Controller type: MR,Memory size is: 512MB
scsi host0: LSI SAS based MegaRAID driver
scsi 0:2:0:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:1:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:2:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:3:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:4:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:5:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:6:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
scsi 0:2:7:0: Direct-Access     LSI      RAID 5/6 SAS 6G  2.13 PQ: 0 ANSI: 5
sd 0:2:0:0: [sda] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:0:0: [sda] 4096-byte physical blocks
sd 0:2:0:0: Attached scsi generic sg0 type 0
sd 0:2:0:0: [sda] Write Protect is off
sd 0:2:1:0: [sdb] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:1:0: [sdb] 4096-byte physical blocks
sd 0:2:1:0: Attached scsi generic sg1 type 0
sd 0:2:0:0: [sda] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:1:0: [sdb] Write Protect is off
sd 0:2:2:0: [sdc] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:2:0: [sdc] 4096-byte physical blocks
sd 0:2:2:0: Attached scsi generic sg2 type 0
sd 0:2:1:0: [sdb] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:2:0: [sdc] Write Protect is off
sd 0:2:3:0: [sdd] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:3:0: [sdd] 4096-byte physical blocks
sd 0:2:3:0: Attached scsi generic sg3 type 0
sd 0:2:2:0: [sdc] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:3:0: [sdd] Write Protect is off
 sda: sda1
sd 0:2:4:0: [sde] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:4:0: [sde] 4096-byte physical blocks
sd 0:2:4:0: Attached scsi generic sg4 type 0
sd 0:2:0:0: [sda] Attached SCSI disk
sd 0:2:3:0: [sdd] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:4:0: [sde] Write Protect is off
sd 0:2:5:0: [sdf] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:5:0: [sdf] 4096-byte physical blocks
 sdb: sdb1
sd 0:2:5:0: Attached scsi generic sg5 type 0
sd 0:2:1:0: [sdb] Attached SCSI disk
sd 0:2:4:0: [sde] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
 sdc: sdc1 sdc2
sd 0:2:6:0: [sdg] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:6:0: [sdg] 4096-byte physical blocks
sd 0:2:6:0: Attached scsi generic sg6 type 0
sd 0:2:5:0: [sdf] Write Protect is off
sd 0:2:2:0: [sdc] Attached SCSI disk
Switched to clocksource tsc
 sdd: sdd1 sdd2
sd 0:2:5:0: [sdf] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:7:0: [sdh] 285671424 512-byte logical blocks: (146 GB/136 GiB)
sd 0:2:7:0: [sdh] 4096-byte physical blocks
sd 0:2:7:0: Attached scsi generic sg7 type 0
sd 0:2:3:0: [sdd] Attached SCSI disk
sd 0:2:6:0: [sdg] Write Protect is off
sd 0:2:6:0: [sdg] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:2:7:0: [sdh] Write Protect is off
 sdg: unknown partition table
sd 0:2:7:0: [sdh] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
 sdf: sdf1 sdf2
sd 0:2:6:0: [sdg] Attached SCSI disk
sd 0:2:5:0: [sdf] Attached SCSI disk
 sde: sde1 sde2 sde3 sde4 < sde5 sde6 sde7 sde8 >
 sdh: unknown partition table
sd 0:2:7:0: [sdh] Attached SCSI disk
sd 0:2:4:0: [sde] Attached SCSI disk
Loading ipt_REJECT.ko module
Loading nf_conntrack_ipv4.ko module
Loading iptable_filter.ko modkvm: VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL does not work properly. Using workaround
ule
Loading nf_iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
reject_ipv6.ko module
Loading nIPMI System Interface driver.
f_defrag_ipv6.koipmi_si: probing via ACPI
 module
Loadingipmi_si 00:06: [io  0x0ca2-0x0ca3] regsize 1 spacing 1 irq 0
 xt_state.ko modipmi_si: Adding ACPI-specified kcs state machineule
Loading ip6
table_filter.ko ipmi_si: probing via SMBIOS
module
Loading ipmi_si: SMBIOS: io 0xca2 regsize 1 spacing 1 irq 0
macvtap.ko modulipmi_si: Adding SMBIOS-specified kcs state machinee
Loading kvm-i duplicate interface
ntel.ko module
ipmi_si: Trying ACPI-specified kcs state machine at i/o address 0xca2, slave address 0x0, irq 0
Loading iTCO_wdt.ko module
Loading ipmi_si.ko module
ipmi_si 00:06: Found new BMC (man_id: 0x002880, prod_id: 0x0276, dev_id: 0x32)
ipmi_si 00:06: IPMI kcs interface initialized
Loading lpc_ich.iTCO_wdt: Found a ICH10 TCO device (Version=2, TCOBASE=0x0860)
ko module
iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
ACPI Warning: SystemIO range 0x0000000000000828-0x000000000000082f conflicts with OpRegion 0x0000000000000800-0x000000000000084f (\PMRG) (20141107/utaddress-258)
ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
ACPI Warning: SystemIO range 0x0000000000000500-0x000000000000052f conflicts with OpRegion 0x0000000000000500-0x000000000000051b (\_SI_.BLNK) (20141107/utaddress-258)
ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
lpc_ich: Resource conflict(s) found affecting gpio_ich
Loading ioatdma.ioatdma: Intel(R) QuickData Technology Driver 4.00
ko module
Loading i7core_edac.ko module
EDAC MC1: Giving out device to module i7core_edac.c controller i7 core #1: DEV 0000:fe:03.0 (POLLED)
EDAC PCI0: Giving out device to module i7core_edac controller EDAC PCI controller: DEV 0000:fe:03.0 (POLLED)
EDAC MC0: Giving out device to module i7core_edac.c controller i7 core #0: DEV 0000:ff:03.0 (POLLED)
EDAC PCI1: Giving out device to module i7core_edac controller EDAC PCI controller: DEV 0000:ff:03.0 (POLLED)
EDAC i7core: Driver loaded, 2 memory controller(s) found.
Loading ptp.ko mPTP clock support registered
odule
Loading ext4.ko module
Loading mptscsih.ko module
Loading lpfc.ko module
Emulex LightPulse Fibre Channel SCSI driver 10.4.8000.0.
Copyright(c) 2004-2014 Emulex.  All rights reserved.
scsi host1: Emulex LPe12000 PCIe Fibre Channel Adapter  on PCI bus 30 device 00 irq 40
scsi host2: Emulex LPe12000 PCIe Fibre Channel Adapter  on PCI bus 30 device 01 irq 43
Loading ip6t_REJECT.ko module
Loading nf_conntrack_ipv6.ko moduigb: Intel(R) Gigabit Ethernet Network Driver - version 5.2.15-k
le
Loading vhosigb: Copyright (c) 2007-2014 Intel Corporation.
t_net.ko module
Loading igb.ko module
igb 0000:01:00.0: DCA enabled
igb 0000:01:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:01:00.0: eth0: (PCIe:2.5Gb/s:Width x2) c8:0a:a9:9d:fa:52
igb 0000:01:00.0: eth0: PBA No: Unknown
igb 0000:01:00.0: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
igb 0000:01:00.1: DCA enabled
igb 0000:01:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:01:00.1: eth1: (PCIe:2.5Gb/s:Width x2) c8:0a:a9:9d:fa:53
igb 0000:01:00.1: eth1: PBA No: Unknown
igb 0000:01:00.1: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
igb 0000:02:00.0: DCA enabled
igb 0000:02:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:02:00.0: eth2: (PCIe:2.5Gb/s:Width x2) c8:0a:a9:9d:fa:54
igb 0000:02:00.0: eth2: PBA No: Unknown
igb 0000:02:00.0: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
igb 0000:02:00.1: DCA enabled
igb 0000:02:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:02:00.1: eth3: (PCIe:2.5Gb/s:Width x2) c8:0a:a9:9d:fa:55
igb 0000:02:00.1: eth3: PBA No: Unknown
igb 0000:02:00.1: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
Loading mptsas.kFusion MPT SAS Host driver 3.04.20
o module
mptbase: ioc0: Initiating bringup
ioc0: LSISAS1064E B3: Capabilities={Initiator}
scsi host3: ioc0: LSISAS1064E B3, FwRev=011e0000h, Ports=1, MaxQ=277, IRQ=16
mptsas: ioc0: attaching sata device: fw_channel 0, fw_id 0, phy 0, sas_addr 0x1221000000000000
scsi 3:0:0:0: Direct-Access     ATA      ST9160511NS      FTD4 PQ: 0 ANSI: 5
sd 3:0:0:0: Attached scsi generic sg8 type 0
sd 3:0:0:0: [sdi] 312581808 512-byte logical blocks: (160 GB/149 GiB)
mptsas: ioc0: attaching sata device: fw_channel 0, fw_id 1, phy 1, sas_addr 0x1221000001000000
scsi 3:0:1:0: Direct-Access     ATA      ST9160511NS      FTD4 PQ: 0 ANSI: 5
sd 3:0:1:0: Attached scsi generic sg9 type 0
sd 3:0:1:0: [sdj] 312581808 512-byte logical blocks: (160 GB/149 GiB)
sd 3:0:0:0: [sdi] Write Protect is off
sd 3:0:0:0: [sdi] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sd 3:0:1:0: [sdj] Write Protect is off
sd 3:0:1:0: [sdj] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sdi: sdi1 sdi2 sdi3
random: nonblocking pool is initialized
 sdj: sdj1 sdj2 sdj3 sdj4 < sdj5 sdj6 >
sd 3:0:0:0: [sdi] Attached SCSI disk
sd 3:0:1:0: [sdj] Attached SCSI disk
Waiting for required block device discovery
Waiting for device with scsi_ids: 360030057014aa330182f86352027e114 ...
Creating block device loop0
Creating block device loop1
Creating block device loop2
Creating block device loop3
Creating block device loop4
Creating block device loop5
Creating block device loop6
Creating block device loop7
Creating block device ram0
Creating block device ram1
Creating block device ram10
Creating block device ram11
Creating block device ram12
Creating block device ram13
Creating block device ram14
Creating block device ram15
Creating block device ram2
Creating block device ram3
Creating block device ram4
Creating block device ram5
Creating block device ram6
Creating block device ram7
Creating block device ram8
Creating block device ram9
Creating block d sda: sda1
evice sda
Creating block device sdb
 sdb: sdb1
Creating block d sdc: sdc1 sdc2
evice sdc
Creating block d sdd: sdd1 sdd2
evice sdd
Creating block device sde
 sde: sde1 sde2 sde3 sde4 < sde5 sde6 sde7 sde8 >
Creating block d sdf: sdf1 sdf2
evice sdf
Creating block d sdg: unknown partition table
evice sdg
Creating block d sdh: unknown partition table
evice sdh
Creating block device sdi
 sdi: sdi1 sdi2 sdi3
Creating block device sdj
 sdj: sdj1 sdj2 sdj3 sdj4 < sdj5 sdj6 >
Found device with scsi_ids: 360030057014aa330182f86352027e114
Creating Remain Block Devices
Saving to the local filesystem LABEL=/dump2
e2fsck 1.41.12 (17-May-2010)
/dump2: clean, 17/8929280 files, 630400/35708672 blocks
EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: 
Free memory/Total memory (free %): 62460 / 110204 ( 56.6767 )
Saving vmcore-dmesg.txt
Missing the struct log size export
Saving vmcore-dmesg.txt failed
\rExcluding unnecessary pages        : [  0 %] \rExcluding unnecessary pages        : [100 %] \rExcluding unnecessary pages        : [ 22 %] \rExcluding unnecessary pages        : [100 %] \rCopying data                       : [  2 %] \rCopying data                       : [ 13 %] \rCopying data                       : [ 21 %] \rCopying data                       : [ 28 %] \rCopying data                       : [ 37 %] \rCopying data                       : [ 47 %] \rCopying data                       : [ 57 %] \rCopying data                       : [ 66 %] \rCopying data                       : [ 76 %] \rCopying data                       : [ 86 %] \rCopying data                       : [ 96 %] \rCopying data                       : [100 %] 
^[[0JSaving core complete
kvm: exiting hardware virtualization
sd 3:0:1:0: [sdj] Synchronizing SCSI cache
sd 3:0:0:0: [sdi] Synchronizing SCSI cache
sd 0:2:7:0: [sdh] Synchronizing SCSI cache
sd 0:2:6:0: [sdg] Synchronizing SCSI cache
sd 0:2:5:0: [sdf] Synchronizing SCSI cache
sd 0:2:4:0: [sde] Synchronizing SCSI cache
sd 0:2:3:0: [sdd] Synchronizing SCSI cache
sd 0:2:2:0: [sdc] Synchronizing SCSI cache
sd 0:2:1:0: [sdb] Synchronizing SCSI cache
sd 0:2:0:0: [sda] Synchronizing SCSI cache
reboot: Restarting system
reboot: machine restart

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-26  7:27     ` Takao Indoh
@ 2014-12-29  3:15       ` Li, ZhenHua
  2015-01-06  0:18         ` Takao Indoh
  0 siblings, 1 reply; 21+ messages in thread
From: Li, ZhenHua @ 2014-12-29  3:15 UTC (permalink / raw)
  To: Takao Indoh
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

[-- Attachment #1: Type: text/plain, Size: 10201 bytes --]

Hi Takao Indoh,

Happy New Year, and thank you very much for you help.  The flush is quite
 a problem,  as there are several places the flush function should be called, 
I think the flush should be placed in functions like __iommu_update_old_*.  
Created a small patch for this, it is attached.



As I cannot reproduce your problems on my system, so could you please try 
these steps?
1. Apply the latest patchset, including 9/10 and 10/10, and then apply the 
attached patch_for_flush.patch.  And then test the kernel.

2.  If 1 does not fix the DMAR fault  problems, then it might be caused by 
7/10, so please *unpatch* it from the kernel (others and the  attached one
should be patched), and then test the kernel.

Regards
Zhenhua

On 12/26/2014 03:27 PM, Takao Indoh wrote:
> On 2014/12/26 15:46, Li, ZhenHua wrote:
>> Hi Takao Indoh,
>>
>> Thank you very much for your testing. I will add your update in next
>> version.
>> Also I think a flush for __iommu_update_old_root_entry is also necessary.
>>
>> Currently I have no idea about your fault, does it happen before or
>> during its loading? Could you send me your full kernel log as an
>> attachment?
> Sure, see attached file.
>
> I removed 9/10 and 10/10 patches from my kernel to avoid panic problem I
> reported in previous mail, and then tested kdump. So please ignore
> intr-remap fault message in log file. Also please ignore stack trace
> starting with the following message, it's a problem of my box.
>
>   Flags mismatch irq 0. 00000080 (i801_smbus) vs. 00015a00 (timer)
>
> Thanks,
> Takao Indoh
>
>> Regards and Merry Christmas.
>> Zhenhua
>>
>> On 12/26/2014 01:13 PM, Takao Indoh wrote:
>>> Hi Zhen-Hua,
>>>
>>> I tested your patch and found two problems.
>>>
>>> [1]
>>> Kenel panic occurs during 2nd kernel boot.
>>>
>>> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
>>> Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
>>> Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
>>>   0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
>>>   ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
>>>   ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
>>> Call Trace:
>>>   [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
>>>   [<ffffffff815b19f1>] panic+0xbb/0x1fa
>>>   [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
>>>   [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
>>>   [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
>>>   [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
>>>   [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
>>>   [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
>>>   [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
>>>   [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>>   [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
>>>   [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
>>>   [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>> ---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>>
>>>
>>> This panic seems to be related to unflushed cache. I confirmed this
>>> problem was fixed by the following patch.
>>>
>>> --- a/drivers/iommu/intel_irq_remapping.c
>>> +++ b/drivers/iommu/intel_irq_remapping.c
>>> @@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
>>>   	set_64bit(&irte->high, irte_modified->high);
>>>   
>>>   #ifdef CONFIG_CRASH_DUMP
>>> -	if (is_kdump_kernel())
>>> +	if (is_kdump_kernel()) {
>>>   		__iommu_update_old_irte(iommu, index);
>>> +		__iommu_flush_cache(iommu,
>>> +			iommu->ir_table->base_old_virt +
>>> +			index * sizeof(struct irte),
>>> +			sizeof(struct irte));
>>> +	}
>>>   #endif
>>>   	__iommu_flush_cache(iommu, irte, sizeof(*irte));
>>>   
>>>
>>> [2]
>>> Some DMAR error messages are still found in 2nd kernel boot.
>>>
>>> dmar: DRHD: handling fault status reg 2
>>> dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
>>> DMAR:[fault reason 01] Present bit in root entry is clear
>>>
>>> I confiremd your commit 1a2262 was already applied. Any idea?
>>>
>>> Thanks,
>>> Takao Indoh
>>>
>>>
>>> On 2014/12/22 18:15, Li, Zhen-Hua wrote:
>>>> This patchset is an update of Bill Sumner's patchset, implements a fix for:
>>>> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
>>>> when a panic happens, the kdump kernel will boot with these faults:
>>>>
>>>>       dmar: DRHD: handling fault status reg 102
>>>>       dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>>>>       DMAR:[fault reason 01] Present bit in root entry is clear
>>>>
>>>>       dmar: DRHD: handling fault status reg 2
>>>>       dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>>>>       INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>>>>
>>>> On some system, the interrupt remapping fault will also happen even if the
>>>> intel_iommu is not set to on, because the interrupt remapping will be enabled
>>>> when x2apic is needed by the system.
>>>>
>>>> The cause of the DMA fault is described in Bill's original version, and the
>>>> INTR-Remap fault is caused by a similar reason. In short, the initialization
>>>> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
>>>> response.
>>>>
>>>> To fix this problem, we modifies the behaviors of the intel vt-d in the
>>>> crashdump kernel:
>>>>
>>>> For DMA Remapping:
>>>> 1. To accept the vt-d hardware in an active state,
>>>> 2. Do not disable and re-enable the translation, keep it enabled.
>>>> 3. Use the old root entry table, do not rewrite the RTA register.
>>>> 4. Malloc and use new context entry table and page table, copy data from the
>>>>      old ones that used by the old kernel.
>>>> 5. to use different portions of the iova address ranges for the device drivers
>>>>      in the crashdump kernel than the iova ranges that were in-use at the time
>>>>      of the panic.
>>>> 6. After device driver is loaded, when it issues the first dma_map command,
>>>>      free the dmar_domain structure for this device, and generate a new one, so
>>>>      that the device can be assigned a new and empty page table.
>>>> 7. When a new context entry table is generated, we also save its address to
>>>>      the old root entry table.
>>>>
>>>> For Interrupt Remapping:
>>>> 1. To accept the vt-d hardware in an active state,
>>>> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
>>>> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
>>>> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>>>>      the updated data will be stored to the old interrupt remapping table.
>>>>
>>>> Advantages of this approach:
>>>> 1. All manipulation of the IO-device is done by the Linux device-driver
>>>>      for that device.
>>>> 2. This approach behaves in a manner very similar to operation without an
>>>>      active iommu.
>>>> 3. Any activity between the IO-device and its RMRR areas is handled by the
>>>>      device-driver in the same manner as during a non-kdump boot.
>>>> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>>>>      This supports the practice of creating a special kdump kernel without
>>>>      drivers for any devices that are not required for taking a crashdump.
>>>> 5. Minimal code-changes among the existing mainline intel vt-d code.
>>>>
>>>> Summary of changes in this patch set:
>>>> 1. Added some useful function for root entry table in code intel-iommu.c
>>>> 2. Added new members to struct root_entry and struct irte;
>>>> 3. Functions to load old root entry table to iommu->root_entry from the memory
>>>>      of old kernel.
>>>> 4. Functions to malloc new context entry table and page table and copy the data
>>>>      from the old ones to the malloced new ones.
>>>> 5. Functions to enable support for DMA remapping in kdump kernel.
>>>> 6. Functions to load old irte data from the old kernel to the kdump kernel.
>>>> 7. Some code changes that support other behaviours that have been listed.
>>>> 8. In the new functions, use physical address as "unsigned long" type, not
>>>>      pointers.
>>>>
>>>> Original version by Bill Sumner:
>>>>       https://lkml.org/lkml/2014/1/10/518
>>>>       https://lkml.org/lkml/2014/4/15/716
>>>>       https://lkml.org/lkml/2014/4/24/836
>>>>
>>>> Zhenhua's last of Bill's patchset:
>>>>       https://lkml.org/lkml/2014/10/21/134
>>>>       https://lkml.org/lkml/2014/12/15/121
>>>>
>>>> Changed in this version:
>>>> 1. Do not disable and re-enable traslation and interrupt remapping.
>>>> 2. Use old root entry table.
>>>> 3. Use old interrupt remapping table.
>>>> 4. Use "unsigned long" as physical address.
>>>> 5. Use intel_unmap to unmap the old dma;
>>>>
>>>> This patchset should be applied with this one together:
>>>>       https://lkml.org/lkml/2014/11/5/43
>>>>       x86/iommu: fix incorrect bit operations in setting values
>>>>
>>>> Bill Sumner (5):
>>>>     iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>     iommu/vt-d: Items required for kdump
>>>>     iommu/vt-d: data types and functions used for kdump
>>>>     iommu/vt-d: Add domain-id functions
>>>>     iommu/vt-d: enable kdump support in iommu module
>>>>
>>>> Li, Zhen-Hua (10):
>>>>     iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>     iommu/vt-d: Items required for kdump
>>>>     iommu/vt-d: Add domain-id functions
>>>>     iommu/vt-d: functions to copy data from old mem
>>>>     iommu/vt-d: Add functions to load and save old re
>>>>     iommu/vt-d: datatypes and functions used for kdump
>>>>     iommu/vt-d: enable kdump support in iommu module
>>>>     iommu/vtd: assign new page table for dma_map
>>>>     iommu/vt-d: Copy functions for irte
>>>>     iommu/vt-d: Use old irte in kdump kernel
>>>>
>>>>    drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>>>>    drivers/iommu/intel_irq_remapping.c |   99 +++-
>>>>    include/linux/intel-iommu.h         |   18 +
>>>>    3 files changed, 1123 insertions(+), 44 deletions(-)
>>>>
>>
>>


[-- Attachment #2: patch_for_flush.patch --]
[-- Type: text/x-patch, Size: 1435 bytes --]

diff -urp a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
--- a/drivers/iommu/intel-iommu.c	2014-12-29 10:52:02.000000000 +0800
+++ b/drivers/iommu/intel-iommu.c	2014-12-29 09:36:23.000000000 +0800
@@ -5188,6 +5188,8 @@ static void __iommu_load_old_root_entry(
 		|| (!iommu->root_entry_old_phys))
 		return;
 	memcpy(iommu->root_entry, iommu->root_entry_old_virt, PAGE_SIZE);
+
+	__iommu_flush_cache(iommu, iommu->root_entry, PAGE_SIZE);
 }
 
 /*
@@ -5220,6 +5222,8 @@ static void __iommu_update_old_root_entr
 	to = iommu->root_entry_old_virt;
 	from = iommu->root_entry;
 	memcpy(to + start, from + start, size);
+
+	__iommu_flush_cache(iommu, to + start, size);
 }
 
 /*
diff -urp a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
--- a/drivers/iommu/intel_irq_remapping.c	2014-12-29 10:52:02.000000000 +0800
+++ b/drivers/iommu/intel_irq_remapping.c	2014-12-29 09:51:52.000000000 +0800
@@ -1350,6 +1350,9 @@ static int __iommu_load_old_irte(struct
 		iommu->ir_table->base_old_virt,
 		INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte));
 
+	__iommu_flush_cache(iommu, iommu->ir_table->base,
+		INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte));
+
 	return 0;
 }
 
@@ -1382,6 +1385,8 @@ static int __iommu_update_old_irte(struc
 	from = iommu->ir_table->base;
 	memcpy(to + start, from + start, size);
 
+	__iommu_flush_cache(iommu, to + start, size);
+
 	return 0;
 }
 #endif /* CONFIG_CRASH_DUMP */

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-29  3:15       ` Li, ZhenHua
@ 2015-01-06  0:18         ` Takao Indoh
  2015-01-06  2:04           ` Li, ZhenHua
  0 siblings, 1 reply; 21+ messages in thread
From: Takao Indoh @ 2015-01-06  0:18 UTC (permalink / raw)
  To: zhen-hual
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

On 2014/12/29 12:15, Li, ZhenHua wrote:
> Hi Takao Indoh,
> 
> Happy New Year, and thank you very much for you help.  The flush is quite

Happy new year!

>   a problem,  as there are several places the flush function should be called,
> I think the flush should be placed in functions like __iommu_update_old_*.
> Created a small patch for this, it is attached.
> 
> 
> 
> As I cannot reproduce your problems on my system, so could you please try
> these steps?
> 1. Apply the latest patchset, including 9/10 and 10/10, and then apply the
> attached patch_for_flush.patch.  And then test the kernel.

No inter-remap fault, but there is still DMAR fault message.

> 
> 2.  If 1 does not fix the DMAR fault  problems, then it might be caused by
> 7/10, so please *unpatch* it from the kernel (others and the  attached one
> should be patched), and then test the kernel.

DMAR fault still occurs. I'll dig iommu driver code to find out the
reason.

Thanks,
Takao Indoh

> 
> Regards
> Zhenhua
> 
> On 12/26/2014 03:27 PM, Takao Indoh wrote:
>> On 2014/12/26 15:46, Li, ZhenHua wrote:
>>> Hi Takao Indoh,
>>>
>>> Thank you very much for your testing. I will add your update in next
>>> version.
>>> Also I think a flush for __iommu_update_old_root_entry is also necessary.
>>>
>>> Currently I have no idea about your fault, does it happen before or
>>> during its loading? Could you send me your full kernel log as an
>>> attachment?
>> Sure, see attached file.
>>
>> I removed 9/10 and 10/10 patches from my kernel to avoid panic problem I
>> reported in previous mail, and then tested kdump. So please ignore
>> intr-remap fault message in log file. Also please ignore stack trace
>> starting with the following message, it's a problem of my box.
>>
>>    Flags mismatch irq 0. 00000080 (i801_smbus) vs. 00015a00 (timer)
>>
>> Thanks,
>> Takao Indoh
>>
>>> Regards and Merry Christmas.
>>> Zhenhua
>>>
>>> On 12/26/2014 01:13 PM, Takao Indoh wrote:
>>>> Hi Zhen-Hua,
>>>>
>>>> I tested your patch and found two problems.
>>>>
>>>> [1]
>>>> Kenel panic occurs during 2nd kernel boot.
>>>>
>>>> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
>>>> Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
>>>> Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
>>>>    0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
>>>>    ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
>>>>    ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
>>>> Call Trace:
>>>>    [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
>>>>    [<ffffffff815b19f1>] panic+0xbb/0x1fa
>>>>    [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
>>>>    [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
>>>>    [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
>>>>    [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
>>>>    [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
>>>>    [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
>>>>    [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
>>>>    [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>>>    [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
>>>>    [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
>>>>    [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>>> ---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>>>
>>>>
>>>> This panic seems to be related to unflushed cache. I confirmed this
>>>> problem was fixed by the following patch.
>>>>
>>>> --- a/drivers/iommu/intel_irq_remapping.c
>>>> +++ b/drivers/iommu/intel_irq_remapping.c
>>>> @@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
>>>>    	set_64bit(&irte->high, irte_modified->high);
>>>>    
>>>>    #ifdef CONFIG_CRASH_DUMP
>>>> -	if (is_kdump_kernel())
>>>> +	if (is_kdump_kernel()) {
>>>>    		__iommu_update_old_irte(iommu, index);
>>>> +		__iommu_flush_cache(iommu,
>>>> +			iommu->ir_table->base_old_virt +
>>>> +			index * sizeof(struct irte),
>>>> +			sizeof(struct irte));
>>>> +	}
>>>>    #endif
>>>>    	__iommu_flush_cache(iommu, irte, sizeof(*irte));
>>>>    
>>>>
>>>> [2]
>>>> Some DMAR error messages are still found in 2nd kernel boot.
>>>>
>>>> dmar: DRHD: handling fault status reg 2
>>>> dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
>>>> DMAR:[fault reason 01] Present bit in root entry is clear
>>>>
>>>> I confiremd your commit 1a2262 was already applied. Any idea?
>>>>
>>>> Thanks,
>>>> Takao Indoh
>>>>
>>>>
>>>> On 2014/12/22 18:15, Li, Zhen-Hua wrote:
>>>>> This patchset is an update of Bill Sumner's patchset, implements a fix for:
>>>>> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
>>>>> when a panic happens, the kdump kernel will boot with these faults:
>>>>>
>>>>>        dmar: DRHD: handling fault status reg 102
>>>>>        dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>>>>>        DMAR:[fault reason 01] Present bit in root entry is clear
>>>>>
>>>>>        dmar: DRHD: handling fault status reg 2
>>>>>        dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>>>>>        INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>>>>>
>>>>> On some system, the interrupt remapping fault will also happen even if the
>>>>> intel_iommu is not set to on, because the interrupt remapping will be enabled
>>>>> when x2apic is needed by the system.
>>>>>
>>>>> The cause of the DMA fault is described in Bill's original version, and the
>>>>> INTR-Remap fault is caused by a similar reason. In short, the initialization
>>>>> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
>>>>> response.
>>>>>
>>>>> To fix this problem, we modifies the behaviors of the intel vt-d in the
>>>>> crashdump kernel:
>>>>>
>>>>> For DMA Remapping:
>>>>> 1. To accept the vt-d hardware in an active state,
>>>>> 2. Do not disable and re-enable the translation, keep it enabled.
>>>>> 3. Use the old root entry table, do not rewrite the RTA register.
>>>>> 4. Malloc and use new context entry table and page table, copy data from the
>>>>>       old ones that used by the old kernel.
>>>>> 5. to use different portions of the iova address ranges for the device drivers
>>>>>       in the crashdump kernel than the iova ranges that were in-use at the time
>>>>>       of the panic.
>>>>> 6. After device driver is loaded, when it issues the first dma_map command,
>>>>>       free the dmar_domain structure for this device, and generate a new one, so
>>>>>       that the device can be assigned a new and empty page table.
>>>>> 7. When a new context entry table is generated, we also save its address to
>>>>>       the old root entry table.
>>>>>
>>>>> For Interrupt Remapping:
>>>>> 1. To accept the vt-d hardware in an active state,
>>>>> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
>>>>> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
>>>>> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>>>>>       the updated data will be stored to the old interrupt remapping table.
>>>>>
>>>>> Advantages of this approach:
>>>>> 1. All manipulation of the IO-device is done by the Linux device-driver
>>>>>       for that device.
>>>>> 2. This approach behaves in a manner very similar to operation without an
>>>>>       active iommu.
>>>>> 3. Any activity between the IO-device and its RMRR areas is handled by the
>>>>>       device-driver in the same manner as during a non-kdump boot.
>>>>> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>>>>>       This supports the practice of creating a special kdump kernel without
>>>>>       drivers for any devices that are not required for taking a crashdump.
>>>>> 5. Minimal code-changes among the existing mainline intel vt-d code.
>>>>>
>>>>> Summary of changes in this patch set:
>>>>> 1. Added some useful function for root entry table in code intel-iommu.c
>>>>> 2. Added new members to struct root_entry and struct irte;
>>>>> 3. Functions to load old root entry table to iommu->root_entry from the memory
>>>>>       of old kernel.
>>>>> 4. Functions to malloc new context entry table and page table and copy the data
>>>>>       from the old ones to the malloced new ones.
>>>>> 5. Functions to enable support for DMA remapping in kdump kernel.
>>>>> 6. Functions to load old irte data from the old kernel to the kdump kernel.
>>>>> 7. Some code changes that support other behaviours that have been listed.
>>>>> 8. In the new functions, use physical address as "unsigned long" type, not
>>>>>       pointers.
>>>>>
>>>>> Original version by Bill Sumner:
>>>>>        https://lkml.org/lkml/2014/1/10/518
>>>>>        https://lkml.org/lkml/2014/4/15/716
>>>>>        https://lkml.org/lkml/2014/4/24/836
>>>>>
>>>>> Zhenhua's last of Bill's patchset:
>>>>>        https://lkml.org/lkml/2014/10/21/134
>>>>>        https://lkml.org/lkml/2014/12/15/121
>>>>>
>>>>> Changed in this version:
>>>>> 1. Do not disable and re-enable traslation and interrupt remapping.
>>>>> 2. Use old root entry table.
>>>>> 3. Use old interrupt remapping table.
>>>>> 4. Use "unsigned long" as physical address.
>>>>> 5. Use intel_unmap to unmap the old dma;
>>>>>
>>>>> This patchset should be applied with this one together:
>>>>>        https://lkml.org/lkml/2014/11/5/43
>>>>>        x86/iommu: fix incorrect bit operations in setting values
>>>>>
>>>>> Bill Sumner (5):
>>>>>      iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>>      iommu/vt-d: Items required for kdump
>>>>>      iommu/vt-d: data types and functions used for kdump
>>>>>      iommu/vt-d: Add domain-id functions
>>>>>      iommu/vt-d: enable kdump support in iommu module
>>>>>
>>>>> Li, Zhen-Hua (10):
>>>>>      iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>>      iommu/vt-d: Items required for kdump
>>>>>      iommu/vt-d: Add domain-id functions
>>>>>      iommu/vt-d: functions to copy data from old mem
>>>>>      iommu/vt-d: Add functions to load and save old re
>>>>>      iommu/vt-d: datatypes and functions used for kdump
>>>>>      iommu/vt-d: enable kdump support in iommu module
>>>>>      iommu/vtd: assign new page table for dma_map
>>>>>      iommu/vt-d: Copy functions for irte
>>>>>      iommu/vt-d: Use old irte in kdump kernel
>>>>>
>>>>>     drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>>>>>     drivers/iommu/intel_irq_remapping.c |   99 +++-
>>>>>     include/linux/intel-iommu.h         |   18 +
>>>>>     3 files changed, 1123 insertions(+), 44 deletions(-)
>>>>>
>>>
>>>
> 



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2015-01-06  0:18         ` Takao Indoh
@ 2015-01-06  2:04           ` Li, ZhenHua
  0 siblings, 0 replies; 21+ messages in thread
From: Li, ZhenHua @ 2015-01-06  2:04 UTC (permalink / raw)
  To: Takao Indoh
  Cc: dwmw2, bhe, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

Thank you very much for your help.

I have found there are several places need flush, and I will send a new
version
of this patchset with the flush functions.

Regards
Zhenhua

On 01/06/2015 08:18 AM, Takao Indoh wrote:
> On 2014/12/29 12:15, Li, ZhenHua wrote:
>> Hi Takao Indoh,
>>
>> Happy New Year, and thank you very much for you help.  The flush is quite
> Happy new year!
>
>>   a problem,  as there are several places the flush function should be called,
>> I think the flush should be placed in functions like __iommu_update_old_*.
>> Created a small patch for this, it is attached.
>>
>>
>>
>> As I cannot reproduce your problems on my system, so could you please try
>> these steps?
>> 1. Apply the latest patchset, including 9/10 and 10/10, and then apply the
>> attached patch_for_flush.patch.  And then test the kernel.
> No inter-remap fault, but there is still DMAR fault message.
>
>> 2.  If 1 does not fix the DMAR fault  problems, then it might be caused by
>> 7/10, so please *unpatch* it from the kernel (others and the  attached one
>> should be patched), and then test the kernel.
> DMAR fault still occurs. I'll dig iommu driver code to find out the
> reason.
>
> Thanks,
> Takao Indoh
>
>> Regards
>> Zhenhua
>>
>> On 12/26/2014 03:27 PM, Takao Indoh wrote:
>>> On 2014/12/26 15:46, Li, ZhenHua wrote:
>>>> Hi Takao Indoh,
>>>>
>>>> Thank you very much for your testing. I will add your update in next
>>>> version.
>>>> Also I think a flush for __iommu_update_old_root_entry is also necessary.
>>>>
>>>> Currently I have no idea about your fault, does it happen before or
>>>> during its loading? Could you send me your full kernel log as an
>>>> attachment?
>>> Sure, see attached file.
>>>
>>> I removed 9/10 and 10/10 patches from my kernel to avoid panic problem I
>>> reported in previous mail, and then tested kdump. So please ignore
>>> intr-remap fault message in log file. Also please ignore stack trace
>>> starting with the following message, it's a problem of my box.
>>>
>>>    Flags mismatch irq 0. 00000080 (i801_smbus) vs. 00015a00 (timer)
>>>
>>> Thanks,
>>> Takao Indoh
>>>
>>>> Regards and Merry Christmas.
>>>> Zhenhua
>>>>
>>>> On 12/26/2014 01:13 PM, Takao Indoh wrote:
>>>>> Hi Zhen-Hua,
>>>>>
>>>>> I tested your patch and found two problems.
>>>>>
>>>>> [1]
>>>>> Kenel panic occurs during 2nd kernel boot.
>>>>>
>>>>> ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
>>>>> Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>>>> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0 #25
>>>>> Hardware name: FUJITSU-SV PRIMERGY BX920 S2/D3030, BIOS 080015 Rev.3D81.3030 02/10/2012
>>>>>    0000000000000002 ffff880036167d08 ffffffff815b1c6a 0000000000000000
>>>>>    ffffffff817f7670 ffff880036167d88 ffffffff815b19f1 0000000000000008
>>>>>    ffff880036167d98 ffff880036167d38 ffffffff810a5d2f ffff880036167d98
>>>>> Call Trace:
>>>>>    [<ffffffff815b1c6a>] dump_stack+0x48/0x5e
>>>>>    [<ffffffff815b19f1>] panic+0xbb/0x1fa
>>>>>    [<ffffffff810a5d2f>] ? vprintk_default+0x1f/0x30
>>>>>    [<ffffffff814c6a6c>] panic_if_irq_remap+0x1c/0x20
>>>>>    [<ffffffff81b53985>] check_timer+0x1e7/0x5ed
>>>>>    [<ffffffff8129bd9d>] ? radix_tree_lookup+0xd/0x10
>>>>>    [<ffffffff81b5413b>] setup_IO_APIC+0x261/0x292
>>>>>    [<ffffffff81b50302>] native_smp_prepare_cpus+0x214/0x25d
>>>>>    [<ffffffff81b41c65>] kernel_init_freeable+0x1dc/0x28c
>>>>>    [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>>>>    [<ffffffff815aaf0e>] kernel_init+0xe/0xf0
>>>>>    [<ffffffff815b5d2c>] ret_from_fork+0x7c/0xb0
>>>>>    [<ffffffff815aaf00>] ? rest_init+0x80/0x80
>>>>> ---[ end Kernel panic - not syncing: timer doesn't work through Interrupt-remapped IO-APIC
>>>>>
>>>>>
>>>>> This panic seems to be related to unflushed cache. I confirmed this
>>>>> problem was fixed by the following patch.
>>>>>
>>>>> --- a/drivers/iommu/intel_irq_remapping.c
>>>>> +++ b/drivers/iommu/intel_irq_remapping.c
>>>>> @@ -200,8 +200,13 @@ static int modify_irte(int irq, struct irte *irte_modified)
>>>>>    	set_64bit(&irte->high, irte_modified->high);
>>>>>    
>>>>>    #ifdef CONFIG_CRASH_DUMP
>>>>> -	if (is_kdump_kernel())
>>>>> +	if (is_kdump_kernel()) {
>>>>>    		__iommu_update_old_irte(iommu, index);
>>>>> +		__iommu_flush_cache(iommu,
>>>>> +			iommu->ir_table->base_old_virt +
>>>>> +			index * sizeof(struct irte),
>>>>> +			sizeof(struct irte));
>>>>> +	}
>>>>>    #endif
>>>>>    	__iommu_flush_cache(iommu, irte, sizeof(*irte));
>>>>>    
>>>>>
>>>>> [2]
>>>>> Some DMAR error messages are still found in 2nd kernel boot.
>>>>>
>>>>> dmar: DRHD: handling fault status reg 2
>>>>> dmar: DMAR:[DMA Write] Request device [01:00.0] fault addr ffded000
>>>>> DMAR:[fault reason 01] Present bit in root entry is clear
>>>>>
>>>>> I confiremd your commit 1a2262 was already applied. Any idea?
>>>>>
>>>>> Thanks,
>>>>> Takao Indoh
>>>>>
>>>>>
>>>>> On 2014/12/22 18:15, Li, Zhen-Hua wrote:
>>>>>> This patchset is an update of Bill Sumner's patchset, implements a fix for:
>>>>>> If a kernel boots with intel_iommu=on on a system that supports intel vt-d,
>>>>>> when a panic happens, the kdump kernel will boot with these faults:
>>>>>>
>>>>>>        dmar: DRHD: handling fault status reg 102
>>>>>>        dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
>>>>>>        DMAR:[fault reason 01] Present bit in root entry is clear
>>>>>>
>>>>>>        dmar: DRHD: handling fault status reg 2
>>>>>>        dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
>>>>>>        INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear
>>>>>>
>>>>>> On some system, the interrupt remapping fault will also happen even if the
>>>>>> intel_iommu is not set to on, because the interrupt remapping will be enabled
>>>>>> when x2apic is needed by the system.
>>>>>>
>>>>>> The cause of the DMA fault is described in Bill's original version, and the
>>>>>> INTR-Remap fault is caused by a similar reason. In short, the initialization
>>>>>> of vt-d drivers causes the in-flight DMA and interrupt requests get wrong
>>>>>> response.
>>>>>>
>>>>>> To fix this problem, we modifies the behaviors of the intel vt-d in the
>>>>>> crashdump kernel:
>>>>>>
>>>>>> For DMA Remapping:
>>>>>> 1. To accept the vt-d hardware in an active state,
>>>>>> 2. Do not disable and re-enable the translation, keep it enabled.
>>>>>> 3. Use the old root entry table, do not rewrite the RTA register.
>>>>>> 4. Malloc and use new context entry table and page table, copy data from the
>>>>>>       old ones that used by the old kernel.
>>>>>> 5. to use different portions of the iova address ranges for the device drivers
>>>>>>       in the crashdump kernel than the iova ranges that were in-use at the time
>>>>>>       of the panic.
>>>>>> 6. After device driver is loaded, when it issues the first dma_map command,
>>>>>>       free the dmar_domain structure for this device, and generate a new one, so
>>>>>>       that the device can be assigned a new and empty page table.
>>>>>> 7. When a new context entry table is generated, we also save its address to
>>>>>>       the old root entry table.
>>>>>>
>>>>>> For Interrupt Remapping:
>>>>>> 1. To accept the vt-d hardware in an active state,
>>>>>> 2. Do not disable and re-enable the interrupt remapping, keep it enabled.
>>>>>> 3. Use the old interrupt remapping table, do not rewrite the IRTA register.
>>>>>> 4. When ioapic entry is setup, the interrupt remapping table is changed, and
>>>>>>       the updated data will be stored to the old interrupt remapping table.
>>>>>>
>>>>>> Advantages of this approach:
>>>>>> 1. All manipulation of the IO-device is done by the Linux device-driver
>>>>>>       for that device.
>>>>>> 2. This approach behaves in a manner very similar to operation without an
>>>>>>       active iommu.
>>>>>> 3. Any activity between the IO-device and its RMRR areas is handled by the
>>>>>>       device-driver in the same manner as during a non-kdump boot.
>>>>>> 4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
>>>>>>       This supports the practice of creating a special kdump kernel without
>>>>>>       drivers for any devices that are not required for taking a crashdump.
>>>>>> 5. Minimal code-changes among the existing mainline intel vt-d code.
>>>>>>
>>>>>> Summary of changes in this patch set:
>>>>>> 1. Added some useful function for root entry table in code intel-iommu.c
>>>>>> 2. Added new members to struct root_entry and struct irte;
>>>>>> 3. Functions to load old root entry table to iommu->root_entry from the memory
>>>>>>       of old kernel.
>>>>>> 4. Functions to malloc new context entry table and page table and copy the data
>>>>>>       from the old ones to the malloced new ones.
>>>>>> 5. Functions to enable support for DMA remapping in kdump kernel.
>>>>>> 6. Functions to load old irte data from the old kernel to the kdump kernel.
>>>>>> 7. Some code changes that support other behaviours that have been listed.
>>>>>> 8. In the new functions, use physical address as "unsigned long" type, not
>>>>>>       pointers.
>>>>>>
>>>>>> Original version by Bill Sumner:
>>>>>>        https://lkml.org/lkml/2014/1/10/518
>>>>>>        https://lkml.org/lkml/2014/4/15/716
>>>>>>        https://lkml.org/lkml/2014/4/24/836
>>>>>>
>>>>>> Zhenhua's last of Bill's patchset:
>>>>>>        https://lkml.org/lkml/2014/10/21/134
>>>>>>        https://lkml.org/lkml/2014/12/15/121
>>>>>>
>>>>>> Changed in this version:
>>>>>> 1. Do not disable and re-enable traslation and interrupt remapping.
>>>>>> 2. Use old root entry table.
>>>>>> 3. Use old interrupt remapping table.
>>>>>> 4. Use "unsigned long" as physical address.
>>>>>> 5. Use intel_unmap to unmap the old dma;
>>>>>>
>>>>>> This patchset should be applied with this one together:
>>>>>>        https://lkml.org/lkml/2014/11/5/43
>>>>>>        x86/iommu: fix incorrect bit operations in setting values
>>>>>>
>>>>>> Bill Sumner (5):
>>>>>>      iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>>>      iommu/vt-d: Items required for kdump
>>>>>>      iommu/vt-d: data types and functions used for kdump
>>>>>>      iommu/vt-d: Add domain-id functions
>>>>>>      iommu/vt-d: enable kdump support in iommu module
>>>>>>
>>>>>> Li, Zhen-Hua (10):
>>>>>>      iommu/vt-d: Update iommu_attach_domain() and its callers
>>>>>>      iommu/vt-d: Items required for kdump
>>>>>>      iommu/vt-d: Add domain-id functions
>>>>>>      iommu/vt-d: functions to copy data from old mem
>>>>>>      iommu/vt-d: Add functions to load and save old re
>>>>>>      iommu/vt-d: datatypes and functions used for kdump
>>>>>>      iommu/vt-d: enable kdump support in iommu module
>>>>>>      iommu/vtd: assign new page table for dma_map
>>>>>>      iommu/vt-d: Copy functions for irte
>>>>>>      iommu/vt-d: Use old irte in kdump kernel
>>>>>>
>>>>>>     drivers/iommu/intel-iommu.c         | 1050 +++++++++++++++++++++++++++++++++--
>>>>>>     drivers/iommu/intel_irq_remapping.c |   99 +++-
>>>>>>     include/linux/intel-iommu.h         |   18 +
>>>>>>     3 files changed, 1123 insertions(+), 44 deletions(-)
>>>>>>
>>>>
>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
                   ` (11 preceding siblings ...)
  2014-12-26  5:13 ` Takao Indoh
@ 2015-01-06  6:37 ` Baoquan He
  2015-01-06  7:05   ` Li, ZhenHua
  12 siblings, 1 reply; 21+ messages in thread
From: Baoquan He @ 2015-01-06  6:37 UTC (permalink / raw)
  To: Li, Zhen-Hua
  Cc: dwmw2, indou.takao, joro, vgoyal, dyoung, iommu, linux-kernel,
	linux-pci, kexec, alex.williamson, ddutile, ishii.hironobu,
	bhelgaas, doug.hatch, jerry.hoemann, tom.vaden, li.zhang6,
	lisa.mitchell, billsumnerlinux

[-- Attachment #1: Type: text/plain, Size: 194 bytes --]

Hi Zhenhua,

I just tested your patchset based on 3.19.0-rc2+, and found several dmar
fault and intr-remap fault, it seems not the same as Takao's, please
check the attachment.

Thanks
Baoquan


[-- Attachment #2: iommu.log --]
[-- Type: text/plain, Size: 83415 bytes --]


[root@dhcp-16-105 ~]# kdumpctl restart
kexec: failed to unloaded kdump kernel
Stopping kdump: [FAILED]
+ /sbin/kexec -p '--command-line=BOOT_IMAGE=/vmlinuz-3.19.0-rc2+ root=UUID=f170152e-de83-46ee-9546-8ccd53f9753b ro rd.md=0 rd.lvm=0 rd.dm=0 vconsole.keymap=us rd.luk+
+ set +x
kexec: loaded kdump kernel
Starting kdump: [OK]
[root@dhcp-16-105 ~]# echo c >/proc/sysrq-trigger 
[  722.444549] SysRq : Trigger a crash
[  722.448133] BUG: unable to handle kernel NULL pointer dereference at           (null)
[  722.456044] IP: [<ffffffff8145a3d6>] sysrq_handle_crash+0x16/0x20
[  722.462179] PGD 404720067 PUD 41afd6067 PMD 0 
[  722.466719] Oops: 0002 [#1] SMP 
[  722.469999] Modules linked in: fuse ipt_MASQUERADE nf_nat_masquerade_ipv4 xt_CHECKSUM tun ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 cfg80211 xt_conntrack ebtable_nc
[  722.570165] CPU: 0 PID: 1979 Comm: bash Not tainted 3.19.0-rc2+ #93
[  722.576453] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[  722.585176] task: ffff88041d6a9b60 ti: ffff88040882c000 task.ti: ffff88040882c000
[  722.592699] RIP: 0010:[<ffffffff8145a3d6>]  [<ffffffff8145a3d6>] sysrq_handle_crash+0x16/0x20
[  722.601292] RSP: 0018:ffff88040882fe58  EFLAGS: 00010246
[  722.606618] RAX: 000000000000000f RBX: ffffffff81cafdc0 RCX: 0000000000000000
[  722.613776] RDX: 0000000000000000 RSI: ffff88042fc0e6f8 RDI: 0000000000000063
[  722.620932] RBP: ffff88040882fe58 R08: 00000000000000c2 R09: ffffffff81eec85c
[  722.628098] R10: 000000000000040f R11: 000000000000040e R12: 0000000000000063
[  722.635249] R13: 0000000000000000 R14: 0000000000000007 R15: 0000000000000000
[  722.642415] FS:  00007f0cca07b740(0000) GS:ffff88042fc00000(0000) knlGS:0000000000000000
[  722.650529] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  722.656294] CR2: 0000000000000000 CR3: 00000004095e4000 CR4: 00000000000407f0
[  722.663444] Stack:
[  722.665471]  ffff88040882fe88 ffffffff8145abc7 0000000000000002 00007f0cca092000
[  722.672960]  0000000000000002 ffff88040882ff48 ffff88040882fea8 ffffffff8145b073
[  722.680440]  0000000000000001 ffff8803ee48b300 ffff88040882fed8 ffffffff8126ebcd
[  722.687927] Call Trace:
[  722.690390]  [<ffffffff8145abc7>] __handle_sysrq+0x107/0x170
[  722.696079]  [<ffffffff8145b073>] write_sysrq_trigger+0x33/0x40
[  722.702029]  [<ffffffff8126ebcd>] proc_reg_write+0x3d/0x80
[  722.707536]  [<ffffffff81205a47>] vfs_write+0xb7/0x1f0
[  722.712697]  [<ffffffff810227ec>] ? do_audit_syscall_entry+0x6c/0x70
[  722.719084]  [<ffffffff812066c5>] SyS_write+0x55/0xd0
[  722.724159]  [<ffffffff81747069>] system_call_fastpath+0x12/0x17
[  722.730176] Code: c1 f7 ff ff eb db 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 66 66 66 66 90 55 c7 05 b4 e9 a8 00 01 00 00 00 48 89 e5 0f ae f8 <c6> 04 25 00 0 
[  722.750274] RIP  [<ffffffff8145a3d6>] sysrq_handle_crash+0x16/0x20
[  722.756509]  RSP <ffff88040882fe58>
[  722.760023] CR2: 0000000000000000
h
 [    0.000000] ERROR: earlyprintk= earlyser already used
[    0.000000] debug: ignoring loglevel setting.
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.7 present.
[    0.000000] DMI: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x38000 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-DBFFF write-protect
[    0.000000]   DC000-E9FFF uncachable
[    0.000000]   EA000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 0000CC000000 mask 3FFFFC000000 uncachable
[    0.000000]   1 base 0000D0000000 mask 3FFFF0000000 uncachable
[    0.000000]   2 base 0000E0000000 mask 3FFFE0000000 uncachable
[    0.000000]   3 base 000430000000 mask 3FFFF0000000 uncachable
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled
[    0.000000] PAT configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- UC  
[    0.000000] x2apic enabled by BIOS, switching to x2apic ops
[    0.000000] found SMP MP-table at [mem 0x000f4bc0-0x000f4bcf] mapped at [ffff8800000f4bc0]
[    0.000000] Base memory trampoline at [ffff880000090000] 90000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000]  [mem 0x00000000-0x000fffff] page 4k
[    0.000000] BRK [0x36ffa000, 0x36ffafff] PGTABLE
[    0.000000] BRK [0x36ffb000, 0x36ffbfff] PGTABLE
[    0.000000] BRK [0x36ffc000, 0x36ffcfff] PGTABLE
[    0.000000] init_memory_mapping: [mem 0x37c00000-0x37dfffff]
[    0.000000]  [mem 0x37c00000-0x37dfffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x34000000-0x37bfffff]
[    0.000000]  [mem 0x34000000-0x37bfffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x28000000-0x33ffffff]
[    0.000000]  [mem 0x28000000-0x33ffffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x37e00000-0x37f65fff]
[    0.000000]  [mem 0x37e00000-0x37f65fff] page 4k
[    0.000000] BRK [0x36ffd000, 0x36ffdfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x32c65000-0x35ffffff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F9810 000024 (v02 HPQOEM)
[    0.000000] ACPI: XSDT 0x00000000CBA28078 00006C (v01 HPQOEM SLIC-WKS 01072009 AMI  00010013)
[    0.000000] ACPI: FACP 0x00000000CBA304C8 0000F4 (v04 HPQOEM SLIC-WKS 01072009 AMI  00010013)
[    0.000000] ACPI: DSDT 0x00000000CBA28170 008352 (v02 HPQOEM SLIC-WKS 00000102 INTL 20051117)
[    0.000000] ACPI: FACS 0x00000000CBB5BF80 000040
[    0.000000] ACPI: APIC 0x00000000CBA305C0 00007E (v03 HPQOEM SLIC-WKS 01072009 AMI  00010013)
[    0.000000] ACPI: MCFG 0x00000000CBA30640 00003C (v01 HPQOEM OEMMCFG. 01072009 MSFT 00000097)
[    0.000000] ACPI: HPET 0x00000000CBA30680 000038 (v01 HPQOEM SLIC-WKS 01072009 AMI. 00000004)
[    0.000000] ACPI: ASF! 0x00000000CBA306B8 0000A0 (v32 INTEL   HCG     00000001 TFSM 000F4240)
[    0.000000] ACPI: SSDT 0x00000000CBA30758 0058DA (v01 COMPAQ WMI      00000001 MSFT 03000001)
[    0.000000] ACPI: SLIC 0x00000000CBA36038 000176 (v01 HPQOEM SLIC-WKS 00000001      00000000)
[    0.000000] ACPI: SSDT 0x00000000CBA361B0 06E284 (v02 INTEL  CpuPm    00004000 INTL 20051117)
[    0.000000] ACPI: DMAR 0x00000000CBAA4438 0000A0 (v01 A M I  OEMDMAR  00000001 INTL 00000001)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] Setting APIC routing to cluster x2apic.
[    0.000000] NUMA turned off
[    0.000000] Faking a node at [mem 0x0000000000000000-0x0000000037ffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x37f52000-0x37f65fff]
[    0.000000]  [ffffea0000000000-ffffea0000dfffff] PMD -> [ffff880037000000-ffff8800375fffff] on node 0
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x00001000-0x00ffffff]
[    0.000000]   DMA32    [mem 0x01000000-0x37ffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x00001000-0x00095fff]
[    0.000000]   node   0: [mem 0x28000000-0x37f65fff]
[    0.000000] Initmem setup node 0 [mem 0x00001000-0x37f65fff]
[    0.000000] On node 0 totalpages: 65531
[    0.000000]   DMA zone: 3 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 149 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 1022 pages used for memmap
[    0.000000]   DMA32 zone: 65382 pages, LIFO batch:15
[    0.000000] ACPI: PM-Timer IO Port: 0x408
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x02] enabled)
[    0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 1/0x2 ignored.
[    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x04] enabled)
[    0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 2/0x4 ignored.
[    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x06] enabled)
[    0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 3/0x6 ignored.
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1])
[    0.000000] ACPI: IOAPIC (id[0x00] address[0xfec00000] gsi_base[0])
[    0.000000] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23
[    0.000000] ACPI: IOAPIC (id[0x02] address[0xfec01000] gsi_base[24])
[    0.000000] IOAPIC[1]: apic_id 2, version 32, address 0xfec01000, GSI 24-47
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a701 base: 0xfed00000
[    0.000000] smpboot: 4 Processors exceeds NR_CPUS limit of 1
[    0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x00096000-0x00096fff]
[    0.000000] PM: Registered nosave memory: [mem 0x00097000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x00100000-0x27ffffff]
[    0.000000] PM: Registered nosave memory: [mem 0x37f66000-0x37ffffff]
[    0.000000] e820: [mem 0x38000000-0xcb74ffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:1 nr_node_ids:1
[    0.000000] PERCPU: Embedded 31 pages/cpu @ffff880037c00000 s87168 r8192 d31616 u2097152
[    0.000000] pcpu-alloc: s87168 r8192 d31616 u2097152 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 64485
[    0.000000] Policy zone: DMA32
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.19.0-rc2+ root=UUID=f170152e-de83-46ee-9546-8ccd53f9753b ro rd.md=0 rd.lvm=0 rd.dm=0 vconsole.keymap=us rd.K
[    0.000000] Intel-IOMMU: enabled
[    0.000000] Misrouted IRQ fixup and polling support enabled
[    0.000000] This may significantly impact system performance
[    0.000000] Disabling memory control group subsystem
[    0.000000] PID hash table entries: 1024 (order: 1, 8192 bytes)
[    0.000000] xsave: enabled xstate_bv 0x7, cntxt size 0x340 using standard form
[    0.000000] Memory: 186236K/262124K available (7472K kernel code, 1128K rwdata, 3196K rodata, 1464K init, 1436K bss, 75888K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS:4352 nr_irqs:256 16
[    0.000000] Spurious LAPIC timer interrupt on cpu 0
[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [ttyS0] enabled
[    0.000000] console [ttyS0] enabled
[    0.000000] bootconsole [earlyser0] disabled
[    0.000000] bootconsole [earlyser0] disabled
[    0.000000] hpet clockevent registered
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 2793.395 MHz processor
[    0.000062] Calibrating delay loop (skipped), value calculated using timer frequency.. 5586.79 BogoMIPS (lpj=2793395)
[    0.010727] pid_max: default: 32768 minimum: 301
[    0.015366] ACPI: Core revision 20141107
[    0.072637] ACPI: All ACPI Tables successfully acquired
[    0.077975] Security Framework initialized
[    0.082099] SELinux:  Initializing.
[    0.085612] SELinux:  Starting in permissive mode
[    0.090415] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.097498] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
[    0.104440] Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.110984] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.118250] Initializing cgroup subsys memory
[    0.122628] Initializing cgroup subsys devices
[    0.127089] Initializing cgroup subsys freezer
[    0.131551] Initializing cgroup subsys net_cls
[    0.136009] Initializing cgroup subsys blkio
[    0.140285] Initializing cgroup subsys perf_event
[    0.144995] Initializing cgroup subsys hugetlb
[    0.149495] CPU: Physical Processor ID: 0
[    0.153520] CPU: Processor Core ID: 0
[    0.157211] Last level iTLB entries: 4KB 512, 2MB 8, 4MB 8
[    0.157211] Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32, 1GB 0
[    0.180149] Freeing SMP alternatives memory: 28K (ffffffff81e8a000 - ffffffff81e91000)
[    0.190750] ftrace: allocating 27288 entries in 107 pages
[    0.221595] dmar: Host address width 46
[    0.225443] dmar: DRHD base: 0x000000dfffc000 flags: 0x1
[    0.230791] dmar: IOMMU 0: reg_base_addr dfffc000 ver 1:0 cap d2078c106f0462 ecap f020fe
[    0.238903] dmar: RMRR base: 0x000000cba11000 end: 0x000000cba27fff
[    0.245193] dmar: ATSR flags: 0x0
[    0.248623] IOAPIC id 0 under DRHD base  0xdfffc000 IOMMU 0
[    0.254211] IOAPIC id 2 under DRHD base  0xdfffc000 IOMMU 0
[    0.259804] HPET id 0 under DRHD base 0xdfffc000
[    0.264440] Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.272697] Enabled IRQ remapping in x2apic mode
[    0.277920] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.293984] smpboot: CPU0: Intel(R) Xeon(R) CPU E5-1603 0 @ 2.80GHz (fam: 06, model: 2d, stepping: 07)
[    0.303410] TSC deadline timer enabled
[    0.307209] Performance Events: PEBS fmt1+, 16-deep LBR, SandyBridge events, full-width counters, Broken BIOS detected, complain to your hardware vendor.
[    0.321134] [Firmware Bug]: the BIOS has corrupted hw-PMU resources (MSR 38d is b0)
[    0.328812] Intel PMU driver.
[    0.331801] ... version:                3
[    0.335826] ... bit width:              48
[    0.339936] ... generic registers:      8
[    0.343965] ... value mask:             0000ffffffffffff
[    0.349298] ... max period:             0000ffffffffffff
[    0.354629] ... fixed-purpose events:   3
[    0.358657] ... event mask:             00000007000000ff
[    0.365034] x86: Booted up 1 node, 1 CPUs
[    0.369065] smpboot: Total of 1 processors activated (5586.79 BogoMIPS)
[    0.375727] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[    0.386634] devtmpfs: initialized
[    0.394369] PM: Registering ACPI NVS region [mem 0xcb750000-0xcb7dafff] (569344 bytes)
[    0.402333] PM: Registering ACPI NVS region [mem 0xcbaad000-0xcbaaefff] (8192 bytes)
[    0.410103] PM: Registering ACPI NVS region [mem 0xcbabb000-0xcbacdfff] (77824 bytes)
[    0.417956] PM: Registering ACPI NVS region [mem 0xcbb56000-0xcbb5dfff] (32768 bytes)
[    0.425811] PM: Registering ACPI NVS region [mem 0xcbb71000-0xcbffffff] (4780032 bytes)
[    0.434188] atomic64_test: passed for x86-64 platform with CX8 and with SSE
[    0.441185] pinctrl core: initialized pinctrl subsystem
[    0.446481] RTC time:  6:11:52, date: 01/06/15
[    0.451115] NET: Registered protocol family 16
[    0.455937] cpuidle: using governor menu
[    0.460114] ACPI: bus type PCI registered
[    0.464147] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.470735] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.480070] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[    0.487473] PCI: Using configuration type 1 for base access
[    0.495477] ACPI: Added _OSI(Module Device)
[    0.499682] ACPI: Added _OSI(Processor Device)
[    0.504143] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.508863] ACPI: Added _OSI(Processor Aggregator Device)
[    0.526781] ACPI: Executed 1 blocks of module-level executable AML code
[    0.649090] ACPI: Interpreter enabled
[    0.652776] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20141107/hwxface-580)
[    0.662072] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20141107/hwxface-580)
[    0.671386] ACPI: (supports S0 S3 S4 S5)
[    0.675328] ACPI: Using IOAPIC for interrupt routing
[    0.680361] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.690950] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored
[    0.712237] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7f])
[    0.718448] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.726873] acpi PNP0A08:00: _OSC: platform does not support [PCIeCapability]
[    0.734139] acpi PNP0A08:00: _OSC: not requesting control; platform does not support [PCIeCapability]
[    0.743387] acpi PNP0A08:00: _OSC: OS requested [PCIeHotplug PME AER PCIeCapability]
[    0.751155] acpi PNP0A08:00: _OSC: platform willing to grant [PCIeHotplug PME AER]
[    0.758747] acpi PNP0A08:00: _OSC failed (AE_SUPPORT); disabling ASPM
[    0.766045] PCI host bridge to bus 0000:00
[    0.770164] pci_bus 0000:00: root bus resource [bus 00-7f]
[    0.775675] pci_bus 0000:00: root bus resource [io  0x0000-0x03af]
[    0.781875] pci_bus 0000:00: root bus resource [io  0x03e0-0x0cf7]
[    0.788077] pci_bus 0000:00: root bus resource [io  0x03b0-0x03df]
[    0.794277] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff]
[    0.800479] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
[    0.807376] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000dffff]
[    0.814271] pci_bus 0000:00: root bus resource [mem 0xd4000000-0xdfffffff]
[    0.821170] pci_bus 0000:00: root bus resource [mem 0x3c0000000000-0x3c007fffffff]
[    0.828779] pci 0000:00:00.0: [8086:3c00] type 00 class 0x060000
[    0.834900] pci 0000:00:00.0: PME# supported from D0 D3hot D3cold
[    0.841139] pci 0000:00:01.0: [8086:3c02] type 01 class 0x060400
[    0.847265] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
[    0.853447] pci 0000:00:01.0: System wakeup disabled by ACPI
[    0.859199] pci 0000:00:02.0: [8086:3c04] type 01 class 0x060400
[    0.865321] pci 0000:00:02.0: PME# supported from D0 D3hot D3cold
[    0.871492] pci 0000:00:02.0: System wakeup disabled by ACPI
[    0.877244] pci 0000:00:03.0: [8086:3c08] type 01 class 0x060400
[    0.883370] pci 0000:00:03.0: PME# supported from D0 D3hot D3cold
[    0.889541] pci 0000:00:03.0: System wakeup disabled by ACPI
[    0.895288] pci 0000:00:05.0: [8086:3c28] type 00 class 0x088000
[    0.901487] pci 0000:00:05.2: [8086:3c2a] type 00 class 0x088000
[    0.907671] pci 0000:00:05.4: [8086:3c2c] type 00 class 0x080020
[    0.913717] pci 0000:00:05.4: reg 0x10: [mem 0xd7346000-0xd7346fff]
[    0.920174] pci 0000:00:11.0: [8086:1d3e] type 01 class 0x060400
[    0.926327] pci 0000:00:11.0: PME# supported from D0 D3hot D3cold
[    0.932554] pci 0000:00:16.0: [8086:1d3a] type 00 class 0x078000
[    0.938604] pci 0000:00:16.0: reg 0x10: [mem 0xd7345000-0xd734500f 64bit]
[    0.945506] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold
[    0.951731] pci 0000:00:16.2: [8086:1d3c] type 00 class 0x010185
[    0.957778] pci 0000:00:16.2: reg 0x10: [io  0xf0b0-0xf0b7]
[    0.963382] pci 0000:00:16.2: reg 0x14: [io  0xf0a0-0xf0a3]
[    0.968983] pci 0000:00:16.2: reg 0x18: [io  0xf090-0xf097]
[    0.974588] pci 0000:00:16.2: reg 0x1c: [io  0xf080-0xf083]
[    0.980191] pci 0000:00:16.2: reg 0x20: [io  0xf070-0xf07f]
[    0.985943] pci 0000:00:16.3: [8086:1d3d] type 00 class 0x070002
[    0.991997] pci 0000:00:16.3: reg 0x10: [io  0xf060-0xf067]
[    0.997605] pci 0000:00:16.3: reg 0x14: [mem 0xd7344000-0xd7344fff]
[    1.004085] pci 0000:00:19.0: [8086:1502] type 00 class 0x020000
[    1.010136] pci 0000:00:19.0: reg 0x10: [mem 0xd7300000-0xd731ffff]
[    1.016435] pci 0000:00:19.0: reg 0x14: [mem 0xd7349000-0xd7349fff]
[    1.022731] pci 0000:00:19.0: reg 0x18: [io  0xf040-0xf05f]
[    1.028404] pci 0000:00:19.0: PME# supported from D0 D3hot D3cold
[    1.034570] pci 0000:00:19.0: System wakeup disabled by ACPI
[    1.040316] pci 0000:00:1a.0: [8086:1d2d] type 00 class 0x0c0320
[    1.046371] pci 0000:00:1a.0: reg 0x10: [mem 0xd734b000-0xd734b3ff]
[    1.052772] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold
[    1.058943] pci 0000:00:1a.0: System wakeup disabled by ACPI
[    1.064683] pci 0000:00:1b.0: [8086:1d20] type 00 class 0x040300
[    1.070728] pci 0000:00:1b.0: reg 0x10: [mem 0xd7340000-0xd7343fff 64bit]
[    1.077630] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    1.083856] pci 0000:00:1c.0: [8086:1d12] type 01 class 0x060400
[    1.089991] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    1.096138] pci 0000:00:1c.0: Enabling MPC IRBNCE
[    1.100860] pci 0000:00:1c.0: Intel PCH root port ACS workaround enabled
[    1.107622] pci 0000:00:1c.0: System wakeup disabled by ACPI
[    1.113376] pci 0000:00:1c.5: [8086:1d18] type 01 class 0x060400
[    1.119547] pci 0000:00:1c.5: PME# supported from D0 D3hot D3cold
[    1.125692] pci 0000:00:1c.5: Enabling MPC IRBNCE
[    1.130417] pci 0000:00:1c.5: Intel PCH root port ACS workaround enabled
[    1.137181] pci 0000:00:1c.5: System wakeup disabled by ACPI
[    1.142923] pci 0000:00:1c.6: [8086:1d14] type 01 class 0x060400
[    1.149052] pci 0000:00:1c.6: PME# supported from D0 D3hot D3cold
[    1.155194] pci 0000:00:1c.6: Enabling MPC IRBNCE
[    1.159917] pci 0000:00:1c.6: Intel PCH root port ACS workaround enabled
[    1.166684] pci 0000:00:1c.6: System wakeup disabled by ACPI
[    1.172422] pci 0000:00:1c.7: [8086:1d16] type 01 class 0x060400
[    1.178553] pci 0000:00:1c.7: PME# supported from D0 D3hot D3cold
[    1.184695] pci 0000:00:1c.7: Enabling MPC IRBNCE
[    1.189419] pci 0000:00:1c.7: Intel PCH root port ACS workaround enabled
[    1.196185] pci 0000:00:1c.7: System wakeup disabled by ACPI
[    1.201926] pci 0000:00:1d.0: [8086:1d26] type 00 class 0x0c0320
[    1.207974] pci 0000:00:1d.0: reg 0x10: [mem 0xd734a000-0xd734a3ff]
[    1.214374] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[    1.220544] pci 0000:00:1d.0: System wakeup disabled by ACPI
[    1.226281] pci 0000:00:1e.0: [8086:244e] type 01 class 0x060401
[    1.232419] pci 0000:00:1e.0: System wakeup disabled by ACPI
[    1.238160] pci 0000:00:1f.0: [8086:1d41] type 00 class 0x060100
[    1.244409] pci 0000:00:1f.2: [8086:2826] type 00 class 0x010400
[    1.250461] pci 0000:00:1f.2: reg 0x10: [io  0xf0f0-0xf0f7]
[    1.256058] pci 0000:00:1f.2: reg 0x14: [io  0xf0e0-0xf0e3]
[    1.261661] pci 0000:00:1f.2: reg 0x18: [io  0xf0d0-0xf0d7]
[    1.267263] pci 0000:00:1f.2: reg 0x1c: [io  0xf0c0-0xf0c3]
[    1.272863] pci 0000:00:1f.2: reg 0x20: [io  0xf020-0xf03f]
[    1.278464] pci 0000:00:1f.2: reg 0x24: [mem 0xd7348000-0xd73487ff]
[    1.284815] pci 0000:00:1f.2: PME# supported from D3hot
[    1.290161] pci 0000:00:1f.3: [8086:1d22] type 00 class 0x0c0500
[    1.296210] pci 0000:00:1f.3: reg 0x10: [mem 0xd7347000-0xd73470ff 64bit]
[    1.303042] pci 0000:00:1f.3: reg 0x20: [io  0xf000-0xf01f]
[    1.308845] pci 0000:00:01.0: PCI bridge to [bus 03]
[    1.313940] pci 0000:05:00.0: [10de:10d8] type 00 class 0x030000
[    1.319981] pci 0000:05:00.0: reg 0x10: [mem 0xd6000000-0xd6ffffff]
[    1.326276] pci 0000:05:00.0: reg 0x14: [mem 0xd8000000-0xdbffffff 64bit pref]
[    1.333527] pci 0000:05:00.0: reg 0x1c: [mem 0xdc000000-0xddffffff 64bit pref]
[    1.340777] pci 0000:05:00.0: reg 0x24: [io  0xd000-0xd07f]
[    1.346378] pci 0000:05:00.0: reg 0x30: [mem 0xd7000000-0xd707ffff pref]
[    1.353232] pci 0000:05:00.1: [10de:0be3] type 00 class 0x040300
[    1.359273] pci 0000:05:00.1: reg 0x10: [mem 0xd7080000-0xd7083fff]
[    1.367597] pci 0000:00:02.0: PCI bridge to [bus 05]
[    1.372586] pci 0000:00:02.0:   bridge window [io  0xd000-0xdfff]
[    1.378700] pci 0000:00:02.0:   bridge window [mem 0xd6000000-0xd70fffff]
[    1.385512] pci 0000:00:02.0:   bridge window [mem 0xd8000000-0xddffffff 64bit pref]
[    1.393372] pci 0000:00:03.0: PCI bridge to [bus 04]
[    1.398480] pci 0000:02:00.0: [8086:1d6b] type 00 class 0x010700
[    1.404538] pci 0000:02:00.0: reg 0x10: [mem 0xde87c000-0xde87ffff 64bit pref]
[    1.411797] pci 0000:02:00.0: reg 0x18: [mem 0xde400000-0xde7fffff 64bit pref]
[    1.419053] pci 0000:02:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    1.424782] pci 0000:02:00.0: reg 0x164: [mem 0xde800000-0xde803fff 64bit pref]
[    1.432235] pci 0000:00:11.0: PCI bridge to [bus 02]
[    1.437224] pci 0000:00:11.0:   bridge window [io  0xe000-0xefff]
[    1.443344] pci 0000:00:11.0:   bridge window [mem 0xde400000-0xde8fffff 64bit pref]
[    1.451199] pci 0000:00:1c.0: PCI bridge to [bus 01]
[    1.456306] pci 0000:00:1c.5: PCI bridge to [bus 06]
[    1.461393] pci 0000:00:1c.6: PCI bridge to [bus 07]
[    1.466494] pci 0000:08:00.0: [104c:8241] type 00 class 0x0c0330
[    1.472555] pci 0000:08:00.0: reg 0x10: [mem 0xd7200000-0xd720ffff 64bit]
[    1.479389] pci 0000:08:00.0: reg 0x18: [mem 0xd7210000-0xd7211fff 64bit]
[    1.486330] pci 0000:08:00.0: supports D1 D2
[    1.490615] pci 0000:08:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.499278] pci 0000:00:1c.7: PCI bridge to [bus 08]
[    1.504269] pci 0000:00:1c.7:   bridge window [mem 0xd7200000-0xd72fffff]
[    1.511177] pci 0000:09:04.0: [1317:0985] type 00 class 0x020000
[    1.517226] pci 0000:09:04.0: reg 0x10: [io  0xc000-0xc0ff]
[    1.522826] pci 0000:09:04.0: reg 0x14: [mem 0xd7121000-0xd71213ff]
[    1.529160] pci 0000:09:04.0: reg 0x30: [mem 0xd7100000-0xd711ffff pref]
[    1.535916] pci 0000:09:04.0: supports D1 D2
[    1.540202] pci 0000:09:04.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.546916] pci 0000:09:05.0: [11c1:5811] type 00 class 0x0c0010
[    1.552964] pci 0000:09:05.0: reg 0x10: [mem 0xd7120000-0xd7120fff]
[    1.559342] pci 0000:09:05.0: supports D1 D2
[    1.563634] pci 0000:09:05.0: PME# supported from D0 D1 D2 D3hot
[    1.569759] pci 0000:00:1e.0: PCI bridge to [bus 09] (subtractive decode)
[    1.576572] pci 0000:00:1e.0:   bridge window [io  0xc000-0xcfff]
[    1.582686] pci 0000:00:1e.0:   bridge window [mem 0xd7100000-0xd71fffff]
[    1.589499] pci 0000:00:1e.0:   bridge window [io  0x0000-0x03af] (subtractive decode)
[    1.597445] pci 0000:00:1e.0:   bridge window [io  0x03e0-0x0cf7] (subtractive decode)
[    1.605386] pci 0000:00:1e.0:   bridge window [io  0x03b0-0x03df] (subtractive decode)
[    1.613328] pci 0000:00:1e.0:   bridge window [io  0x0d00-0xffff] (subtractive decode)
[    1.621269] pci 0000:00:1e.0:   bridge window [mem 0x000a0000-0x000bffff] (subtractive decode)
[    1.629904] pci 0000:00:1e.0:   bridge window [mem 0x000c0000-0x000dffff] (subtractive decode)
[    1.638535] pci 0000:00:1e.0:   bridge window [mem 0xd4000000-0xdfffffff] (subtractive decode)
[    1.647159] pci 0000:00:1e.0:   bridge window [mem 0x3c0000000000-0x3c007fffffff] (subtractive decode)
[    1.657334] ACPI: PCI Root Bridge [PCI1] (domain 0000 [bus 80-ff])
[    1.663550] acpi PNP0A08:01: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    1.671964] acpi PNP0A08:01: _OSC: platform does not support [PCIeCapability]
[    1.679206] acpi PNP0A08:01: _OSC: not requesting control; platform does not support [PCIeCapability]
[    1.688435] acpi PNP0A08:01: _OSC: OS requested [PCIeHotplug PME AER PCIeCapability]
[    1.696190] acpi PNP0A08:01: _OSC: platform willing to grant [PCIeHotplug PME AER]
[    1.703765] acpi PNP0A08:01: _OSC failed (AE_SUPPORT); disabling ASPM
[    1.710589] PCI host bridge to bus 0000:80
[    1.714693] pci_bus 0000:80: root bus resource [bus 80-ff]
[    1.720184] pci_bus 0000:80: root bus resource [io  0x0000-0x03af]
[    1.726370] pci_bus 0000:80: root bus resource [io  0x03e0-0x0cf7]
[    1.732558] pci_bus 0000:80: root bus resource [mem 0x000c0000-0x000dffff]
[    1.739590] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11 12 14 15), disabled.
[    1.747920] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 *10 11 12 14 15), disabled.
[    1.756271] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 *11 12 14 15), disabled.
[    1.764428] ACPI: PCI Interrupt Link [LNKD] (IRQs *3 4 5 6 10 11 12 14 15), disabled.
[    1.772590] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 *5 6 7 10 11 12 14 15), disabled.
[    1.780940] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 10 11 12 14 15) *0, disabled.
[    1.789484] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 *5 6 7 10 11 12 14 15), disabled.
[    1.797828] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 *10 11 12 14 15), disabled.
[    1.806426] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 4/0x2 ignored.
[    1.814284] ACPI: Unable to map lapic to logical cpu number
[    1.820027] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 5/0x4 ignored.
[    1.827878] ACPI: Unable to map lapic to logical cpu number
[    1.833616] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 6/0x6 ignored.
[    1.841472] ACPI: Unable to map lapic to logical cpu number
[    1.847715] ACPI: Enabled 2 GPEs in block 00 to 3F
[    1.852759] vgaarb: setting as boot device: PCI:0000:05:00.0
[    1.858441] vgaarb: device added: PCI:0000:05:00.0,decodes=io+mem,owns=io+mem,locks=none
[    1.866561] vgaarb: loaded
[    1.869281] vgaarb: bridge control possible 0000:05:00.0
[    1.874738] SCSI subsystem initialized
[    1.878566] libata version 3.00 loaded.
[    1.882473] ACPI: bus type USB registered
[    1.886518] usbcore: registered new interface driver usbfs
[    1.892024] usbcore: registered new interface driver hub
[    1.897361] usbcore: registered new device driver usb
[    1.902574] PCI: Using ACPI for IRQ routing
[    1.914574] PCI: Discovered peer bus ff
[    1.918422] PCI: root bus ff: using default resources
[    1.923479] PCI: Probing PCI hardware (bus ff)
[    1.927987] PCI host bridge to bus 0000:ff
[    1.932104] pci_bus 0000:ff: root bus resource [io  0x0000-0xffff]
[    1.938304] pci_bus 0000:ff: root bus resource [mem 0x00000000-0x3fffffffffff]
[    1.945537] pci_bus 0000:ff: No busn resource found for root bus, will use [bus ff-ff]
[    1.953461] pci_bus 0000:ff: busn_res: can not insert [bus ff] under domain [bus 00-ff] (conflicts with (null) [bus 80-ff])
[    1.964603] pci 0000:ff:08.0: [8086:3c80] type 00 class 0x088000
[    1.970705] pci 0000:ff:08.3: [8086:3c83] type 00 class 0x088000
[    1.976829] pci 0000:ff:08.4: [8086:3c84] type 00 class 0x088000
[    1.982965] pci 0000:ff:09.0: [8086:3c90] type 00 class 0x088000
[    1.989075] pci 0000:ff:09.3: [8086:3c93] type 00 class 0x088000
[    1.995209] pci 0000:ff:09.4: [8086:3c94] type 00 class 0x088000
[    2.001344] pci 0000:ff:0a.0: [8086:3cc0] type 00 class 0x088000
[    2.007448] pci 0000:ff:0a.1: [8086:3cc1] type 00 class 0x088000
[    2.013551] pci 0000:ff:0a.2: [8086:3cc2] type 00 class 0x088000
[    2.019658] pci 0000:ff:0a.3: [8086:3cd0] type 00 class 0x088000
[    2.025767] pci 0000:ff:0b.0: [8086:3ce0] type 00 class 0x088000
[    2.031872] pci 0000:ff:0b.3: [8086:3ce3] type 00 class 0x088000
[    2.037981] pci 0000:ff:0c.0: [8086:3ce8] type 00 class 0x088000
[    2.044083] pci 0000:ff:0c.1: [8086:3ce8] type 00 class 0x088000
[    2.050172] pci 0000:ff:0c.6: [8086:3cf4] type 00 class 0x088000
[    2.056260] pci 0000:ff:0c.7: [8086:3cf6] type 00 class 0x088000
[    2.062358] pci 0000:ff:0d.0: [8086:3ce8] type 00 class 0x088000
[    2.068462] pci 0000:ff:0d.1: [8086:3ce8] type 00 class 0x088000
[    2.074564] pci 0000:ff:0d.6: [8086:3cf5] type 00 class 0x088000
[    2.080665] pci 0000:ff:0e.0: [8086:3ca0] type 00 class 0x088000
[    2.086768] pci 0000:ff:0e.1: [8086:3c46] type 00 class 0x110100
[    2.092886] pci 0000:ff:0f.0: [8086:3ca8] type 00 class 0x088000
[    2.099006] pci 0000:ff:0f.1: [8086:3c71] type 00 class 0x088000
[    2.105129] pci 0000:ff:0f.2: [8086:3caa] type 00 class 0x088000
[    2.111254] pci 0000:ff:0f.3: [8086:3cab] type 00 class 0x088000
[    2.117380] pci 0000:ff:0f.4: [8086:3cac] type 00 class 0x088000
[    2.123500] pci 0000:ff:0f.5: [8086:3cad] type 00 class 0x088000
[    2.129626] pci 0000:ff:0f.6: [8086:3cae] type 00 class 0x088000
[    2.135737] pci 0000:ff:10.0: [8086:3cb0] type 00 class 0x088000
[    2.141870] pci 0000:ff:10.1: [8086:3cb1] type 00 class 0x088000
[    2.147999] pci 0000:ff:10.2: [8086:3cb2] type 00 class 0x088000
[    2.154122] pci 0000:ff:10.3: [8086:3cb3] type 00 class 0x088000
[    2.160249] pci 0000:ff:10.4: [8086:3cb4] type 00 class 0x088000
[    2.166375] pci 0000:ff:10.5: [8086:3cb5] type 00 class 0x088000
[    2.172499] pci 0000:ff:10.6: [8086:3cb6] type 00 class 0x088000
[    2.178619] pci 0000:ff:10.7: [8086:3cb7] type 00 class 0x088000
[    2.184744] pci 0000:ff:11.0: [8086:3cb8] type 00 class 0x088000
[    2.190864] pci 0000:ff:13.0: [8086:3ce4] type 00 class 0x088000
[    2.196972] pci 0000:ff:13.1: [8086:3c43] type 00 class 0x110100
[    2.203081] pci 0000:ff:13.4: [8086:3ce6] type 00 class 0x110100
[    2.209184] pci 0000:ff:13.5: [8086:3c44] type 00 class 0x110100
[    2.215295] pci 0000:ff:13.6: [8086:3c45] type 00 class 0x088000
[    2.221411] pci_bus 0000:ff: busn_res: [bus ff] end is updated to ff
[    2.227789] pci_bus 0000:ff: busn_res: can not insert [bus ff] under domain [bus 00-ff] (conflicts with (null) [bus 80-ff])
[    2.238954] PCI: pci_cache_line_size set to 64 bytes
[    2.244095] e820: reserve RAM buffer [mem 0x00096400-0x0009ffff]
[    2.250127] e820: reserve RAM buffer [mem 0x37f66000-0x37ffffff]
[    2.256334] NetLabel: Initializing
[    2.259758] NetLabel:  domain hash size = 128
[    2.264128] NetLabel:  protocols = UNLABELED CIPSOv4
[    2.269138] NetLabel:  unlabeled traffic allowed by default
[    2.274959] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    2.281330] hpet0: 8 comparators, 64-bit 14.318180 MHz counter
[    2.289218] Switched to clocksource hpet
[    2.302446] pnp: PnP ACPI init
[    2.305719] system 00:00: [mem 0xfc000000-0xfcffffff window] has been reserved
[    2.312986] system 00:00: [mem 0xfd000000-0xfdffffff window] has been reserved
[    2.320245] system 00:00: [mem 0xfe000000-0xfeafffff window] has been reserved
[    2.327500] system 00:00: [mem 0xfeb00000-0xfebfffff window] has been reserved
[    2.334752] system 00:00: [mem 0xfed00400-0xfed3ffff window] could not be reserved
[    2.342345] system 00:00: [mem 0xfed45000-0xfedfffff window] has been reserved
[    2.349591] system 00:00: [mem 0xdffff000-0xdfffffff window] has been reserved
[    2.356839] system 00:00: Plug and Play ACPI device, IDs PNP0c01 (active)
[    2.363885] system 00:01: [io  0x0620-0x063f] has been reserved
[    2.369840] system 00:01: [io  0x0610-0x061f] has been reserved
[    2.375783] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    2.382667] pnp 00:02: Plug and Play ACPI device, IDs PNP0303 PNP030b (active)
[    2.389992] pnp 00:03: Plug and Play ACPI device, IDs PNP0f03 PNP0f13 (active)
[    2.397276] pnp 00:04: Plug and Play ACPI device, IDs PNP0b00 (active)
[    2.403920] system 00:05: [io  0x04d0-0x04d1] has been reserved
[    2.409851] system 00:05: Plug and Play ACPI device, IDs PNP0c02 (active)
[    2.416906] pnp 00:06: [dma 0 disabled]
[    2.420786] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)
[    2.427663] system 00:07: [io  0x0400-0x0453] could not be reserved
[    2.433947] system 00:07: [io  0x0458-0x047f] has been reserved
[    2.439900] system 00:07: [io  0x1180-0x119f] has been reserved
[    2.445847] system 00:07: [io  0x0500-0x057f] has been reserved
[    2.451790] system 00:07: [mem 0xfed1c000-0xfed1ffff] has been reserved
[    2.458434] system 00:07: [mem 0xfec00000-0xfecfffff] could not be reserved
[    2.465418] system 00:07: [mem 0xfed08000-0xfed08fff] has been reserved
[    2.472056] system 00:07: [mem 0xff000000-0xffffffff] has been reserved
[    2.478697] system 00:07: Plug and Play ACPI device, IDs PNP0c01 (active)
[    2.485629] system 00:08: [io  0x0454-0x0457] has been reserved
[    2.491577] system 00:08: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    2.499647] system 00:09: [mem 0xfed40000-0xfed44fff] has been reserved
[    2.506269] system 00:09: Plug and Play ACPI device, IDs PNP0c02 (active)
[    2.513051] pnp: PnP ACPI: found 10 devices
[    2.524317] pci 0000:00:01.0: PCI bridge to [bus 03]
[    2.529309] pci 0000:00:02.0: PCI bridge to [bus 05]
[    2.534268] pci 0000:00:02.0:   bridge window [io  0xd000-0xdfff]
[    2.540368] pci 0000:00:02.0:   bridge window [mem 0xd6000000-0xd70fffff]
[    2.547170] pci 0000:00:02.0:   bridge window [mem 0xd8000000-0xddffffff 64bit pref]
[    2.554928] pci 0000:00:03.0: PCI bridge to [bus 04]
[    2.559916] pci 0000:00:11.0: PCI bridge to [bus 02]
[    2.564886] pci 0000:00:11.0:   bridge window [io  0xe000-0xefff]
[    2.570992] pci 0000:00:11.0:   bridge window [mem 0xde400000-0xde8fffff 64bit pref]
[    2.578746] pci 0000:00:1c.0: PCI bridge to [bus 01]
[    2.583731] pci 0000:00:1c.5: PCI bridge to [bus 06]
[    2.588723] pci 0000:00:1c.6: PCI bridge to [bus 07]
[    2.593707] pci 0000:00:1c.7: PCI bridge to [bus 08]
[    2.598681] pci 0000:00:1c.7:   bridge window [mem 0xd7200000-0xd72fffff]
[    2.605489] pci 0000:00:1e.0: PCI bridge to [bus 09]
[    2.610476] pci 0000:00:1e.0:   bridge window [io  0xc000-0xcfff]
[    2.616594] pci 0000:00:1e.0:   bridge window [mem 0xd7100000-0xd71fffff]
[    2.623420] pci_bus 0000:00: resource 4 [io  0x0000-0x03af]
[    2.629020] pci_bus 0000:00: resource 5 [io  0x03e0-0x0cf7]
[    2.634612] pci_bus 0000:00: resource 6 [io  0x03b0-0x03df]
[    2.640206] pci_bus 0000:00: resource 7 [io  0x0d00-0xffff]
[    2.645793] pci_bus 0000:00: resource 8 [mem 0x000a0000-0x000bffff]
[    2.652065] pci_bus 0000:00: resource 9 [mem 0x000c0000-0x000dffff]
[    2.658337] pci_bus 0000:00: resource 10 [mem 0xd4000000-0xdfffffff]
[    2.664697] pci_bus 0000:00: resource 11 [mem 0x3c0000000000-0x3c007fffffff]
[    2.671752] pci_bus 0000:05: resource 0 [io  0xd000-0xdfff]
[    2.677338] pci_bus 0000:05: resource 1 [mem 0xd6000000-0xd70fffff]
[    2.683607] pci_bus 0000:05: resource 2 [mem 0xd8000000-0xddffffff 64bit pref]
[    2.690849] pci_bus 0000:02: resource 0 [io  0xe000-0xefff]
[    2.696441] pci_bus 0000:02: resource 2 [mem 0xde400000-0xde8fffff 64bit pref]
[    2.703691] pci_bus 0000:08: resource 1 [mem 0xd7200000-0xd72fffff]
[    2.709979] pci_bus 0000:09: resource 0 [io  0xc000-0xcfff]
[    2.715573] pci_bus 0000:09: resource 1 [mem 0xd7100000-0xd71fffff]
[    2.721853] pci_bus 0000:09: resource 4 [io  0x0000-0x03af]
[    2.727439] pci_bus 0000:09: resource 5 [io  0x03e0-0x0cf7]
[    2.733031] pci_bus 0000:09: resource 6 [io  0x03b0-0x03df]
[    2.738625] pci_bus 0000:09: resource 7 [io  0x0d00-0xffff]
[    2.744220] pci_bus 0000:09: resource 8 [mem 0x000a0000-0x000bffff]
[    2.750510] pci_bus 0000:09: resource 9 [mem 0x000c0000-0x000dffff]
[    2.756800] pci_bus 0000:09: resource 10 [mem 0xd4000000-0xdfffffff]
[    2.763178] pci_bus 0000:09: resource 11 [mem 0x3c0000000000-0x3c007fffffff]
[    2.770249] pci_bus 0000:80: resource 4 [io  0x0000-0x03af]
[    2.775851] pci_bus 0000:80: resource 5 [io  0x03e0-0x0cf7]
[    2.781454] pci_bus 0000:80: resource 6 [mem 0x000c0000-0x000dffff]
[    2.787752] pci_bus 0000:ff: resource 4 [io  0x0000-0xffff]
[    2.793347] pci_bus 0000:ff: resource 5 [mem 0x00000000-0x3fffffffffff]
[    2.800034] NET: Registered protocol family 2
[    2.804672] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    2.811770] TCP bind hash table entries: 2048 (order: 3, 32768 bytes)
[    2.818230] TCP: Hash tables configured (established 2048 bind 2048)
[    2.824610] TCP: reno registered
[    2.827857] UDP hash table entries: 256 (order: 1, 8192 bytes)
[    2.833708] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[    2.840046] NET: Registered protocol family 1
[    2.845566] pci 0000:05:00.0: Video device with shadowed ROM
[    2.851666] PCI: CLS 64 bytes, default 64
[    2.855768] Unpacking initramfs...
[    4.447503] Freeing initrd memory: 52844K (ffff880032c65000 - ffff880036000000)
[    4.454872] IOMMU Skip disabling iommu hardware translations
[    4.460761] IOMMU Copying translate tables from panicked kernel
[    4.468304] IOMMU: root_cache:0xffff880031960000 phys:0x0003eeae1000
[    4.474686] IOMMU:0 Domain ids from panicked kernel:
[    4.479673] DID did:4(0x0004)
[    4.482657] DID did:10(0x000a)
[    4.485720] DID did:8(0x0008)
[    4.488692] DID did:6(0x0006)
[    4.491671] DID did:3(0x0003)
[    4.494651] DID did:2(0x0002)
[    4.497629] DID did:7(0x0007)
[    4.500605] DID did:1(0x0001)
[    4.503583] DID did:9(0x0009)
[    4.506558] DID did:0(0x0000)
[    4.509536] DID did:11(0x000b)
[    4.512599] DID did:5(0x0005)
[    4.515576] ----------------------------------------
[    4.520546] IOMMU: dmar0 using Queued invalidation
[    4.525355] PCI-DMA: Intel(R) Virtualization Technology for Directed I/O
[    4.534191] RAPL PMU detected, hw unit 2^-16 Joules, API unit is 2^-32 Joules, 3 fixed counters 163840 ms ovfl timer
[    4.545218] AVX version of gcm_enc/dec engaged.
[    4.549767] AES CTR mode by8 optimization enabled
[    4.557005] alg: No test for __gcm-aes-aesni (__driver-gcm-aes-aesni)
[    4.563932] futex hash table entries: 256 (order: 2, 16384 bytes)
[    4.570069] Initialise system trusted keyring
[    4.574510] audit: initializing netlink subsys (disabled)
[    4.579954] audit: type=2000 audit(1420524713.791:1): initialized
[    4.587459] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    4.596339] zpool: loaded
[    4.598985] zbud: loaded
[    4.601812] VFS: Disk quotas dquot_6.5.2
[    4.605822] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    4.613374] Key type big_key registered
[    4.617230] SELinux:  Registering netfilter hooks
[    4.622975] alg: No test for stdrng (krng)
[    4.627095] NET: Registered protocol family 38
[    4.631581] Key type asymmetric registered
[    4.635704] Asymmetric key parser 'x509' registered
[    4.640662] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    4.648115] io scheduler noop registered
[    4.652063] io scheduler deadline registered
[    4.656388] io scheduler cfq registered (default)
[    4.662588] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    4.668203] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    4.674879] intel_idle: MWAIT substates: 0x21120
[    4.679506] intel_idle: v0.4 model 0x2D
[    4.683350] intel_idle: lapic_timer_reliable_states 0xffffffff
[    4.689379] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
[    4.697749] ACPI: Power Button [PWRB]
[    4.701491] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
[    4.708894] ACPI: Power Button [PWRF]
[    4.714402] GHES: HEST is not enabled!
[    4.718275] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    4.745225] serial 00:06: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    4.774137] serial 0000:00:16.3: ttyS1 at I/O 0xf060 (irq = 17, base_baud = 115200) is a 16550A
[    4.783298] Non-volatile memory driver v1.3
[    4.787509] Linux agpgart interface v0.103
[    4.791901] ahci 0000:00:1f.2: version 3.0
[    4.807019] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 6 Gbps 0x5 impl RAID mode
[    4.815128] ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pio ems sxs apst 
[    4.822491] dmar: DRHD: handling fault status reg 2
[    4.827365] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffe0000 
[    4.827365] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    4.840966] dmar: DRHD: handling fault status reg 102
[    4.846011] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffc0000 
[    4.846011] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    4.859567] dmar: DMAR:[DMA Write] Request device [00:1e.0] fault addr fff38000 
[    4.859567] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    4.873136] dmar: DRHD: handling fault status reg 300
[    4.879013] scsi host0: ahci
[    4.882095] scsi host1: ahci
[    4.885105] scsi host2: ahci
[    4.888113] scsi host3: ahci
[    4.891111] scsi host4: ahci
[    4.894115] scsi host5: ahci
[    4.897073] ata1: SATA max UDMA/133 abar m2048@0xd7348000 port 0xd7348100 irq 27
[    4.904480] ata2: DUMMY
[    4.906934] ata3: SATA max UDMA/133 abar m2048@0xd7348000 port 0xd7348200 irq 27
[    4.914327] ata4: DUMMY
[    4.916784] ata5: DUMMY
[    4.919239] ata6: DUMMY
[    4.922035] libphy: Fixed MDIO Bus: probed
[    4.926316] xhci_hcd 0000:08:00.0: xHCI Host Controller
[    4.931617] xhci_hcd 0000:08:00.0: new USB bus registered, assigned bus number 1
[    4.939457] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    4.946256] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.953493] usb usb1: Product: xHCI Host Controller
[    4.958387] usb usb1: Manufacturer: Linux 3.19.0-rc2+ xhci-hcd
[    4.964232] usb usb1: SerialNumber: 0000:08:00.0
[    4.969025] hub 1-0:1.0: USB hub found
[    4.972805] hub 1-0:1.0: 4 ports detected
[    4.977029] xhci_hcd 0000:08:00.0: xHCI Host Controller
[    4.982320] xhci_hcd 0000:08:00.0: new USB bus registered, assigned bus number 2
[    4.989730] dmar: DRHD: handling fault status reg 302
[    4.994791] dmar: DMAR:[DMA Read] Request device [08:00.0] fault addr ffffc000 
[    4.994791] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.008314] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    5.015116] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.022345] usb usb2: Product: xHCI Host Controller
[    5.027240] usb usb2: Manufacturer: Linux 3.19.0-rc2+ xhci-hcd
[    5.033080] usb usb2: SerialNumber: 0000:08:00.0
[    5.037852] hub 2-0:1.0: USB hub found
[    5.041632] hub 2-0:1.0: 4 ports detected
[    5.045862] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    5.052422] ehci-pci: EHCI PCI platform driver
[    5.057035] ehci-pci 0000:00:1a.0: EHCI Host Controller
[    5.062338] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 3
[    5.069755] ehci-pci 0000:00:1a.0: debug port 2
[    5.078282] ehci-pci 0000:00:1a.0: cache line size of 64 is not supported
[    5.085109] ehci-pci 0000:00:1a.0: irq 16, io mem 0xd734b000
[    5.096342] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00
[    5.102099] do_IRQ: 0.35 No irq handler for vector (irq -1)
[    5.107750] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    5.114549] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.121783] usb usb3: Product: EHCI Host Controller
[    5.126669] usb usb3: Manufacturer: Linux 3.19.0-rc2+ ehci_hcd
[    5.132511] usb usb3: SerialNumber: 0000:00:1a.0
[    5.137332] hub 3-0:1.0: USB hub found
[    5.141108] hub 3-0:1.0: 3 ports detected
[    5.145588] ehci-pci 0000:00:1d.0: EHCI Host Controller
[    5.150912] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 4
[    5.158328] ehci-pci 0000:00:1d.0: debug port 2
[    5.166876] ehci-pci 0000:00:1d.0: cache line size of 64 is not supported
[    5.173700] ehci-pci 0000:00:1d.0: irq 23, io mem 0xd734a000
[    5.184439] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00
[    5.190210] dmar: DRHD: handling fault status reg 402
[    5.195273] dmar: INTR-REMAP: Request device [[00:1f.7] fault index 20
[    5.195273] INTR-REMAP:[fault reason 38] Blocked an interrupt request due to source-id verification failure
[    5.211603] usb usb4: New USB device found, idVendor=1d6b, idProduct=0002
[    5.218402] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.225636] usb usb4: Product: EHCI Host Controller
[    5.230521] usb usb4: Manufacturer: Linux 3.19.0-rc2+ ehci_hcd
[    5.236362] usb usb4: SerialNumber: 0000:00:1d.0
[    5.240996] dmar: DRHD: handling fault status reg 502
[    5.246052] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffe0000 
[    5.246052] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.259633] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    5.265834] dmar: DRHD: handling fault status reg 602
[    5.270878] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffe0000 
[    5.270878] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.284582] hub 4-0:1.0: USB hub found
[    5.288359] dmar: DRHD: handling fault status reg 702
[    5.293417] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffc0000 
[    5.293417] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.306996] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    5.313193] dmar: DRHD: handling fault status reg 2
[    5.318075] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffc0000 
[    5.318075] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.331577] hub 4-0:1.0: 3 ports detected
[    5.335807] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    5.342010] ohci-pci: OHCI PCI platform driver
[    5.346487] uhci_hcd: USB Universal Host Controller Interface driver
[    5.352936] usbcore: registered new interface driver usbserial
[    5.358789] usbcore: registered new interface driver usbserial_generic
[    5.365340] usbserial: USB Serial support registered for generic
[    5.371407] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12
[    5.381157] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x100)
[    5.388819] serio: i8042 KBD port at 0x60,0x64 irq 1
[    5.393812] serio: i8042 AUX port at 0x60,0x64 irq 12
[    5.398996] mousedev: PS/2 mouse device common for all mice
[    5.404895] rtc_cmos 00:04: RTC can wake from S4
[    5.409704] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0
[    5.415870] rtc_cmos 00:04: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[    5.423648] device-mapper: uevent: version 1.0.3
[    5.428783] device-mapper: ioctl: 4.29.0-ioctl (2014-10-28) initialised: dm-devel@redhat.com
[    5.437325] Intel P-state driver initializing.
[    5.443561] hidraw: raw HID events driver (C) Jiri Kosina
[    5.449184] usbcore: registered new interface driver usbhid
[    5.454784] usbhid: USB HID core driver
[    5.458944] drop_monitor: Initializing network drop monitor service
[    5.465401] ip_tables: (C) 2000-2006 Netfilter Core Team
[    5.470755] TCP: cubic registered
[    5.474075] Initializing XFRM netlink socket
[    5.478847] NET: Registered protocol family 10
[    5.483542] mip6: Mobile IPv6
[    5.486536] NET: Registered protocol family 17
[    5.491000] mce: Unable to init device /dev/mcelog (rc: -5)
[    5.496744] usb 3-1: new high-speed USB device number 2 using ehci-pci
[    5.503460] Loading compiled-in X.509 certificates
[    5.508276] dmar: DRHD: handling fault status reg 102
[    5.513331] dmar: DMAR:[DMA Read] Request device [00:1a.0] fault addr fffff000 
[    5.513331] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.528003] Loaded X.509 cert 'Magrathea: Glacier signing key: d196e1366cc7c91295775c1e77c548314c3ad291'
[    5.537492] tsc: Refined TSC clocksource calibration: 2793.268 MHz
[    5.543697] registered taskstats version 1
[    5.548416]   Magic number: 15:667:164
[    5.552271] rtc_cmos 00:04: setting system clock to 2015-01-06 06:11:57 UTC (1420524717)
[    5.560455] PM: Hibernation image not present or could not be loaded.
[    5.566997] ehci-pci 0000:00:1a.0: fatal error
[    5.571447] ehci-pci 0000:00:1a.0: HC died; cleaning up
[    5.649981] usb 4-1: new high-speed USB device number 2 using ehci-pci
[    5.656537] dmar: DRHD: handling fault status reg 202
[    5.661590] dmar: DMAR:[DMA Read] Request device [00:1d.0] fault addr fffff000 
[    5.661590] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    5.853075] dmar: DRHD: handling fault status reg 302
[    5.858152] dmar: DMAR:[DMA Write] Request device [00:1e.0] fault addr fffff000 
[    5.858152] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    6.172770] dmar: DRHD: handling fault status reg 402
[    6.177833] dmar: DMAR:[DMA Write] Request device [00:1e.0] fault addr fffff000 
[    6.177833] DMAR:[fault reason 10] non-zero reserved fields in RTP
[    6.548988] Switched to clocksource tsc
[   10.271066] ata3.00: failed to IDENTIFY (I/O error, err_mask=0x100)
[   10.621432] dmar: DRHD: handling fault status reg 502
[   10.626494] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffe0000 
[   10.626494] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   10.640039] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   10.646238] dmar: DRHD: handling fault status reg 602
[   10.651293] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffe0000 
[   10.651293] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   10.664768] dmar: DRHD: handling fault status reg 702
[   10.669809] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffc0000 
[   10.669809] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   10.683382] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[   10.689577] dmar: DRHD: handling fault status reg 2
[   10.694458] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffc0000 
[   10.694458] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   15.713048] ata3.00: qc timeout (cmd 0xa1)
[   15.717176] ata3.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[   15.723299] ata3: limiting SATA link speed to 1.5 Gbps
[   15.728474] ata1.00: qc timeout (cmd 0xec)
[   15.732595] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[   15.738722] ata1: limiting SATA link speed to 3.0 Gbps
[   16.046415] dmar: DRHD: handling fault status reg 102
[   16.051488] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffc0000 
[   16.051488] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   16.065103] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[   16.071323] dmar: DRHD: handling fault status reg 202
[   16.076394] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffc0000 
[   16.076394] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   16.089913] dmar: DRHD: handling fault status reg 302
[   16.094983] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffe0000 
[   16.094983] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   16.108590] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[   16.114794] dmar: DRHD: handling fault status reg 402
[   16.119857] dmar: DMAR:[DMA Read] Request device [00:1f.2] fault addr fffe0000 
[   16.119857] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   20.834724] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   21.697680] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   22.509576] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   23.321463] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   24.133359] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   24.742006] usb usb4-port1: Cannot enable. Maybe the USB cable is bad?
[   24.801096] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   25.664047] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   26.143538] ata3.00: qc timeout (cmd 0xa1)
[   26.147661] ata3.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[   26.153799] ata1.00: qc timeout (cmd 0xec)
[   26.157930] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[   26.466898] dmar: DRHD: handling fault status reg 502
[   26.471972] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffc0000 
[   26.471972] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   26.485588] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[   26.493772] ehci-pci 0000:00:1d.0: port 1 reset error -110
[   26.499297] dmar: DRHD: handling fault status reg 602
[   26.504366] dmar: DMAR:[DMA Write] Request device [00:1f.2] fault addr fffe0000 
[   26.504366] DMAR:[fault reason 10] non-zero reserved fields in RTP
[   26.517974] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[   26.524591] Freeing unused kernel memory: 1464K (ffffffff81d1c000 - ffffffff81e8a000)
[   26.532455] Write protecting the kernel read-only data: 12288k
[   26.538662] Freeing unused kernel memory: 708K (ffff88003674f000 - ffff880036800000)
[   26.546676] Freeing unused kernel memory: 900K (ffff880036b1f000 - ffff880036c00000)
[   26.556078] ehci-pci 0000:00:1d.0: fatal error
[   26.560540] ehci-pci 0000:00:1d.0: HC died; cleaning up
[   26.567014] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ)
[   26.579620] systemd[1]: Running in initial RAM disk.

Welcome to Fedora 20 (Heisenbug) dracut-038-14.git20140724.fc22 (Initramfs)!

[   26.593159] systemd[1]: Set hostname to <dhcp-16-105.nay.redhat.com>.
[   26.600193] random: systemd urandom read with 6 bits of entropy available
[   26.631984] systemd[1]: Expecting device dev-disk-by\x2duuid-3429ef24\x2d72c1\x2d435f\x2da55b\x2d15132ef30516.device...
         Expecting device dev-disk-by\x2duuid-3429ef24\x2d72c...30516.device...
[   26.651165] systemd[1]: Expecting device dev-disk-by\x2duuid-06476532\x2d3675\x2d40ce\x2d98dd\x2df0b6564e5455.device...
         Expecting device dev-disk-by\x2duuid-06476532\x2d367...e5455.device...
[   26.670181] systemd[1]: Expecting device dev-disk-by\x2duuid-f170152e\x2dde83\x2d46ee\x2d9546\x2d8ccd53f9753b.device...
         Expecting device dev-disk-by\x2duuid-f170152e\x2dde8...9753b.device...
[   26.689199] systemd[1]: Starting -.slice.
[  OK  ] Created slice -.slice.
[   26.698214] systemd[1]: Created slice -.slice.
[   26.702693] systemd[1]: Starting System Slice.
[  OK  ] Created slice System Slice.
[   26.713228] systemd[1]: Created slice System Slice.
[   26.718146] systemd[1]: Starting Slices.
[  OK  ] Reached target Slices.
[   26.726239] systemd[1]: Reached target Slices.
[   26.730717] systemd[1]: Starting Timers.
[  OK  ] Reached target Timers.
[   26.739285] systemd[1]: Reached target Timers.
[   26.743773] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch.
[   26.751844] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[   26.759798] systemd[1]: Starting Paths.
[  OK  ] Reached target Paths.
[   26.768283] systemd[1]: Reached target Paths.
[   26.772672] systemd[1]: Starting Journal Socket.
[  OK  ] Listening on Journal Socket.
[   26.782304] systemd[1]: Listening on Journal Socket.
[   26.787342] systemd[1]: Started dracut ask for additional cmdline parameters.
[   26.794597] systemd[1]: Starting dracut cmdline hook...
         Starting dracut cmdline hook...
[   26.804560] systemd[1]: Starting Apply Kernel Variables...
         Starting Apply Kernel Variables...
[   26.818484] systemd[1]: Starting Journal Service...
         Starting Journal Service...
[  OK  ] Started Journal Service.
[   26.836324] systemd[1]: Started Journal Service.
         Starting Create list of required static device nodes...rrent kernel...
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on udev Control Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Swap.
[  OK  ] Reached target Local File Systems.
[  OK  ] Started Apply Kernel Variables.
[  OK  ] Started Create list of required static device nodes ...current kernel.
         Starting Create static device nodes in /dev...
[  OK  ] Started Create static device nodes in /dev.
[  OK  ] Started dracut cmdline hook.
         Starting dracut pre-udev hook...
[  OK  ] Started dracut pre-udev hook.
         Starting udev Kernel Device Manager...
[   26.961900] systemd-udevd[209]: starting version 208
[  OK  ] Started udev Kernel Device Manager.
         Starting udev Coldplug all Devices...
[  OK  ] Started udev Coldplug all Devices.
         Starting dracut initqueue hook...
[  OK  ] Reached target System Initialization.
[  OK  ] Reached target Basic System.
         Mounting Configuration File System...
[  OK  ] Mounted Configuration File System.
[   27.047418] wmi: Mapper loaded
[   27.145121] [drm] Initialized drm 1.1.0 20060810
[   27.304098] isci: Intel(R) C600 SAS Controller Driver - version 1.2.0
[   27.322844] systemd-udevd invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=-1000
[   27.331312] systemd-udevd cpuset=/ mems_allowed=0
[   27.336086] CPU: 0 PID: 209 Comm: systemd-udevd Not tainted 3.19.0-rc2+ #93
[   27.343072] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[   27.351798]  0000000000000000 0000000061818f1a ffff880035c0f9f8 ffffffff8173f728
[   27.359300]  0000000000000000 ffff880035c3db40 ffff880035c0fa98 ffffffff8173c406
[   27.366776]  0000000000001c02 0000000035c0fb58 0000000000001c02 0000000000000292
[   27.374271] Call Trace:
[   27.376744]  [<ffffffff8173f728>] dump_stack+0x45/0x57
[   27.381913]  [<ffffffff8173c406>] dump_header+0x89/0x20a
[   27.387239]  [<ffffffff8118fb80>] oom_kill_process+0x240/0x390
[   27.393075]  [<ffffffff811903f2>] out_of_memory+0x502/0x540
[   27.398657]  [<ffffffff81195cc8>] __alloc_pages_nodemask+0x868/0xa30
[   27.405018]  [<ffffffff811df9d7>] alloc_pages_vma+0x97/0x160
[   27.410686]  [<ffffffff811be1d6>] handle_mm_fault+0xcf6/0x1120
[   27.416524]  [<ffffffff8105d32c>] __do_page_fault+0x1dc/0x5b0
[   27.422279]  [<ffffffff8124b3d8>] ? ep_poll+0x128/0x380
[   27.427510]  [<ffffffff810cefc0>] ? pick_next_task_fair+0x610/0x870
[   27.433785]  [<ffffffff81612891>] ? __sys_recvmsg+0x51/0x90
[   27.439360]  [<ffffffff8105d722>] do_page_fault+0x22/0x30
[   27.444769]  [<ffffffff81749028>] page_fault+0x28/0x30
[   27.449911] Mem-Info:
[   27.452194] Node 0 DMA per-cpu:
[   27.455368] CPU    0: hi:    0, btch:   1 usd:   0
[   27.460164] Node 0 DMA32 per-cpu:
[   27.463505] CPU    0: hi:   90, btch:  15 usd:  27
[   27.468308] active_anon:800 inactive_anon:1025 isolated_anon:0
[   27.468308]  active_file:16 inactive_file:36 isolated_file:0
[   27.468308]  unevictable:39595 dirty:0 writeback:0 unstable:0
[   27.468308]  free:613 slab_reclaimable:2165 slab_unreclaimable:3423
[   27.468308]  mapped:1596 shmem:1036 pagetables:140 bounce:0
[   27.468308]  free_cma:0
[   27.499745] Node 0 DMA free:512kB min:4kB low:4kB high:4kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB s
[   27.537985] lowmem_reserve[]: 0 233 233 233
[   27.542288] Node 0 DMA32 free:1940kB min:1944kB low:2428kB high:2916kB active_anon:3200kB inactive_anon:4100kB active_file:64kB inactive_file:144kB unevictable:15s
[   27.585391] lowmem_reserve[]: 0 0 0 0
[   27.589164] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 2*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 512kB
[   27.601030] Node 0 DMA32: 1*4kB (R) 0*8kB 1*16kB (R) 0*32kB 0*64kB 1*128kB (R) 1*256kB (R) 1*512kB (R) 1*1024kB (R) 0*2048kB 0*4096kB = 1940kB
[   27.614272] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[   27.622733] 40680 total pagecache pages
[   27.626588] 0 pages in swap cache
[   27.629916] Swap cache stats: add 0, delete 0, find 0/0
[   27.635160] Free swap  = 0kB
[   27.638054] Total swap = 0kB
[   27.640949] 65531 pages RAM
[   27.643758] 0 pages HighMem/MovableOnly
[   27.647612] 4986 pages reserved
[   27.650767] 0 pages hwpoisoned
[   27.653840] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[   27.661699] [  126]     0   126     9732      841      23        0             0 systemd-journal
[   27.670513] [  209]     0   209     8857      920      20        0         -1000 systemd-udevd
[   27.679147] [  213]     0   213    28751      617      19        0             0 systemd-udevd
[   27.687780] [  214]     0   214     9769      616      19        0             0 systemd-udevd
[   27.696416] [  216]     0   216     3010      751      14        0             0 dracut-initqueu
[   27.705225] [  225]     0   225     8160      652      19        0             0 udevadm
[   27.713341] Out of memory: Kill process 126 (systemd-journal) score 13 or sacrifice child
[   27.721539] Killed process 126 (systemd-journal) total-vm:38928kB, anon-rss:292kB, file-rss:3072kB
[   27.731134] systemd[1]: systemd-journald.service holdoff time over, scheduling restart.
[   27.740866] systemd[1]: Stopping Journal Service...
[   27.745800] isci 0000:02:00.0: driver configured for rev: 5 silicon
         Stoppin[   27.752726] systemd-udevd invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=-1000
g Journal Servic[   27.762130] systemd-udevd cpuset=e...
/ mems_allowed=0
[   27.768777] CPU: 0 PID: 209 Comm: systemd-udevd Not tainted 3.19.0-rc2+ #93
[   27.775760] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[   27.784481]  0000000000000000 0000000061818f1a ffff880035c0f9f8 ffffffff8173f728
[   27.791998]  0000000000000000 ffff880035c3db40 ffff880035c0fa98 ffffffff8173c406
[   27.799479]  0000000000000000 0000000035c0fb58 0000000000000000 0000000000000292
[   27.806963] Call Trace:
[   27.809419]  [<ffffffff8173f728>] dump_stack+0x45/0x57
[   27.814575]  [<ffffffff8173c406>] dump_header+0x89/0x20a
[   27.819907]  [<ffffffff8118fb80>] oom_kill_process+0x240/0x390
[   27.825756]  [<ffffffff811903f2>] out_of_memory+0x502/0x540
[   27.831351]  [<ffffffff81195cc8>] __alloc_pages_nodemask+0x868/0xa30
[   27.837722]  [<ffffffff811df9d7>] alloc_pages_vma+0x97/0x160
[   27.843399]  [<ffffffff811be1d6>] handle_mm_fault+0xcf6/0x1120
[   27.849253]  [<ffffffff8105d32c>] __do_page_fault+0x1dc/0x5b0
[   27.855020]  [<ffffffff8124b3d8>] ? ep_poll+0x128/0x380
[   27.860263]  [<ffffffff810cefc0>] ? pick_next_task_fair+0x610/0x870
[   27.866549]  [<ffffffff81612891>] ? __sys_recvmsg+0x51/0x90
[   27.872139]  [<ffffffff8105d722>] do_page_fault+0x22/0x30
[   27.877559]  [<ffffffff81749028>] page_fault+0x28/0x30
[   27.882714] Mem-Info:
[   27.884999] Node 0 DMA per-cpu:
[   27.888166] CPU    0: hi:    0, btch:   1 usd:   0
[   27.892975] Node 0 DMA32 per-cpu:
[   27.896327] CPU    0: hi:   90, btch:  15 usd:  41
[   27.901137] active_anon:758 inactive_anon:1027 isolated_anon:0
[   27.901137]  active_file:3 inactive_file:2 isolated_file:0
[   27.901137]  unevictable:39644 dirty:0 writeback:0 unstable:0
[   27.901137]  free:610 slab_reclaimable:2087 slab_unreclaimable:3423
[   27.901137]  mapped:1377 shmem:1037 pagetables:124 bounce:0
[   27.901137]  free_cma:0
[   27.932472] Node 0 DMA free:512kB min:4kB low:4kB high:4kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB s
[   27.970798] lowmem_reserve[]: 0 233 233 233
[   27.975102] Node 0 DMA32 free:1928kB min:1944kB low:2428kB high:2916kB active_anon:3032kB inactive_anon:4108kB active_file:12kB inactive_file:8kB unevictable:1585s
[   28.017660] lowmem_reserve[]: 0 0 0 0
[   28.021443] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 2*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 512kB
[   28.033320] Node 0 DMA32: 0*4kB 1*8kB (R) 0*16kB 0*32kB 0*64kB 1*128kB (R) 1*256kB (R) 1*512kB (R) 1*1024kB (R) 0*2048kB 0*4096kB = 1928kB
[   28.046165] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[   28.054633] 40684 total pagecache pages
[   28.058481] 0 pages in swap cache
[   28.061812] Swap cache stats: add 0, delete 0, find 0/0
[   28.067061] Free swap  = 0kB
[   28.069954] Total swap = 0kB
[   28.072853] 65531 pages RAM
[   28.075660] 0 pages HighMem/MovableOnly
[   28.079517] 4986 pages reserved
[   28.082671] 0 pages hwpoisoned
[   28.085743] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[   28.093602] [  209]     0   209     8857      920      20        0         -1000 systemd-udevd
[   28.102233] [  213]     0   213    28751      617      19        0             0 systemd-udevd
[   28.110871] [  214]     0   214     9769      616      19        0             0 systemd-udevd
[   28.119508] [  216]     0   216     3010      751      14        0             0 dracut-initqueu
[   28.128320] [  225]     0   225     8160      652      19        0             0 udevadm
[   28.136434] [  226]     0   226     3257      241      10        0             0 systemd-cgroups
[   28.145245] Out of memory: Kill process 216 (dracut-initqueu) score 12 or sacrifice child
[   28.153444] Killed process 225 (udevadm) total-vm:32640kB, anon-rss:256kB, file-rss:2352kB
[   28.520126] dracut-initqueu invoked oom-killer: gfp_mask=0x2000d0, order=2, oom_score_adj=0
[   28.528504] dracut-initqueu cpuset=/ mems_allowed=0
[   28.533442] CPU: 0 PID: 216 Comm: dracut-initqueu Not tainted 3.19.0-rc2+ #93
[   28.540600] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[   28.549324]  0000000000000000 000000000a9a4636 ffff880035bcba80 ffffffff8173f728
[   28.556830]  0000000000000000 ffff880035c3ed80 ffff880035bcbb20 ffffffff8173c406
[   28.564320]  0000000000000005 0000000035bcbbe0 0000000000000005 0000000000000282
[   28.571807] Call Trace:
[   28.574267]  [<ffffffff8173f728>] dump_stack+0x45/0x57
[   28.579422]  [<ffffffff8173c406>] dump_header+0x89/0x20a
[   28.584754]  [<ffffffff8118fb80>] oom_kill_process+0x240/0x390
[   28.590609]  [<ffffffff811903f2>] out_of_memory+0x502/0x540
[   28.596203]  [<ffffffff81195cc8>] __alloc_pages_nodemask+0x868/0xa30
[   28.602577]  [<ffffffff81195efd>] alloc_kmem_pages_node+0x6d/0x130
[   28.608786]  [<ffffffff81092753>] ? copy_process.part.26+0x113/0x1b70
[   28.615250]  [<ffffffff81092773>] copy_process.part.26+0x133/0x1b70
[   28.621540]  [<ffffffff8105d352>] ? __do_page_fault+0x202/0x5b0
[   28.627488]  [<ffffffff8130a77f>] ? selinux_inode_permission+0xaf/0x170
[   28.634125]  [<ffffffff81094371>] do_fork+0xe1/0x360
[   28.639116]  [<ffffffff810a3db6>] ? __set_current_blocked+0x36/0x50
[   28.645400]  [<ffffffff81094676>] SyS_clone+0x16/0x20
[   28.650472]  [<ffffffff817473a9>] stub_clone+0x69/0x90
[   28.655633]  [<ffffffff81747069>] ? system_call_fastpath+0x12/0x17
[   28.661827] Mem-Info:
[   28.664115] Node 0 DMA per-cpu:
[   28.667298] CPU    0: hi:    0, btch:   1 usd:   0
[   28.672106] Node 0 DMA32 per-cpu:
[   28.675449] CPU    0: hi:   90, btch:  15 usd:   0
[   28.680259] active_anon:697 inactive_anon:1027 isolated_anon:0
[   28.680259]  active_file:0 inactive_file:0 isolated_file:0
[   28.680259]  unevictable:39647 dirty:0 writeback:0 unstable:0
[   28.680259]  free:618 slab_reclaimable:2083 slab_unreclaimable:3424
[   28.680259]  mapped:1313 shmem:1037 pagetables:108 bounce:0
[   28.680259]  free_cma:0
[   28.711600] Node 0 DMA free:512kB min:4kB low:4kB high:4kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB s
[   28.749918] lowmem_reserve[]: 0 233 233 233
[   28.754205] Node 0 DMA32 free:1960kB min:1944kB low:2428kB high:2916kB active_anon:2788kB inactive_anon:4108kB active_file:0kB inactive_file:0kB unevictable:15858s
[   28.796590] lowmem_reserve[]: 0 0 0 0
[   28.800368] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 2*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 512kB
[   28.812229] Node 0 DMA32: 0*4kB 1*8kB (R) 0*16kB 1*32kB (R) 0*64kB 1*128kB (R) 1*256kB (R) 1*512kB (R) 1*1024kB (R) 0*2048kB 0*4096kB = 1960kB
[   28.825466] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[   28.833931] 40684 total pagecache pages
[   28.837781] 0 pages in swap cache
[   28.841115] Swap cache stats: add 0, delete 0, find 0/0
[   28.846359] Free swap  = 0kB
[   28.849254] Total swap = 0kB
[   28.852151] 65531 pages RAM
[   28.854959] 0 pages HighMem/MovableOnly
[   28.858813] 4986 pages reserved
[   28.861971] 0 pages hwpoisoned
[   28.865039] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[   28.872893] [  209]     0   209     8857      920      20        0         -1000 systemd-udevd
[   28.881532] [  213]     0   213    28751      617      19        0             0 systemd-udevd
[   28.890168] [  214]     0   214     9769      616      19        0             0 systemd-udevd
[   28.898802] [  216]     0   216     3010      751      14        0             0 dracut-initqueu
[   28.907614] [  226]     0   226     3257      241      10        0             0 systemd-cgroups
[   28.916423] Out of memory: Kill process 216 (dracut-initqueu) score 12 or sacrifice child
[   28.924627] Killed process 216 (dracut-initqueu) total-vm:12040kB, anon-rss:564kB, file-rss:2440kB
[   28.934627] systemd-udevd invoked oom-killer: gfp_mask=0x2d2, order=0, oom_score_adj=0
[   28.942570] systemd-udevd cpuset=/ mems_allowed=0
[   28.947339] CPU: 0 PID: 213 Comm: systemd-udevd Not tainted 3.19.0-rc2+ #93
[   28.954321] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[   28.963045]  0000000000000000 0000000040da54f4 ffff880035cdfa38 ffffffff8173f728
[   28.970550]  0000000000000000 ffff880035c3ada0 ffff880035cdfad8 ffffffff8173c406
[   28.978065]  0000000000000000 0000000035cdfb98 0000000000000000 0000000000000292
[   28.985534] Call Trace:
[   28.987984]  [<ffffffff8173f728>] dump_stack+0x45/0x57
[   28.993129]  [<ffffffff8173c406>] dump_header+0x89/0x20a
[   28.998451]  [<ffffffff8101de03>] ? check_tsc_unstable+0x3/0x10
[   29.004372]  [<ffffffff8118fb80>] oom_kill_process+0x240/0x390
[   29.010211]  [<ffffffff811903f2>] out_of_memory+0x502/0x540
[   29.015791]  [<ffffffff81195cc8>] __alloc_pages_nodemask+0x868/0xa30
[   29.022156]  [<ffffffff811dd161>] alloc_pages_current+0x91/0x100
[   29.028163]  [<ffffffff811cce52>] __vmalloc_node_range+0x1a2/0x280
[   29.034352]  [<ffffffff81110085>] ? copy_module_from_fd.isra.48+0xe5/0x180
[   29.041229]  [<ffffffff811cd19b>] vmalloc+0x4b/0x50
[   29.046110]  [<ffffffff81110085>] ? copy_module_from_fd.isra.48+0xe5/0x180
[   29.052998]  [<ffffffff81110085>] copy_module_from_fd.isra.48+0xe5/0x180
[   29.059714]  [<ffffffff811140df>] SyS_finit_module+0x6f/0xd0
[   29.065397]  [<ffffffff81747069>] system_call_fastpath+0x12/0x17
[   29.071421] Mem-Info:
[   29.073701] Node 0 DMA per-cpu:
[   29.076884] CPU    0: hi:    0, btch:   1 usd:   0
[   29.081696] Node 0 DMA32 per-cpu:
[   29.085044] CPU    0: hi:   90, btch:  15 usd:  63
[   29.089849] active_anon:582 inactive_anon:1027 isolated_anon:0
[   29.089849]  active_file:0 inactive_file:0 isolated_file:0
[   29.089849]  unevictable:39647 dirty:0 writeback:0 unstable:0
[   29.089849]  free:614 slab_reclaimable:2083 slab_unreclaimable:3424
[   29.089849]  mapped:1089 shmem:1037 pagetables:108 bounce:0
[   29.089849]  free_cma:0
[   29.121124] Node 0 DMA free:512kB min:4kB low:4kB high:4kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB s
[   29.159363] lowmem_reserve[]: 0 233 233 233
[   29.163652] Node 0 DMA32 free:1944kB min:1944kB low:2428kB high:2916kB active_anon:2328kB inactive_anon:4108kB active_file:0kB inactive_file:0kB unevictable:15858s
[   29.205958] lowmem_reserve[]: 0 0 0 0
[   29.209727] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 2*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 512kB
[   29.221567] Node 0 DMA32: 20*4kB (MR) 1*8kB (R) 0*16kB 0*32kB 1*64kB (R) 0*128kB 1*256kB (R) 1*512kB (R) 1*1024kB (R) 0*2048kB 0*4096kB = 1944kB
[   29.234944] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[   29.243391] 40684 total pagecache pages
[   29.247229] 0 pages in swap cache
[   29.250552] Swap cache stats: add 0, delete 0, find 0/0
[   29.255786] Free swap  = 0kB
[   29.258674] Total swap = 0kB
[   29.261563] 65531 pages RAM
[   29.264364] 0 pages HighMem/MovableOnly
[   29.268208] 4986 pages reserved
[   29.271355] 0 pages hwpoisoned
[   29.274418] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[   29.282259] [  209]     0   209     8857      920      20        0         -1000 systemd-udevd
[   29.290873] [  213]     0   213    28751      617      19        0             0 systemd-udevd
[   29.299512] [  214]     0   214     9769      616      19        0             0 systemd-udevd
[   29.308149] [  226]     0   226     3257      241      10        0             0 systemd-cgroups
[   29.316962] [  231]     0   231     3257      235      12        0             0 systemd-cgroups
[   29.325773] Out of memory: Kill process 213 (systemd-udevd) score 10 or sacrifice child
[   29.333807] Killed process 213 (systemd-udevd) total-vm:115004kB, anon-rss:380kB, file-rss:2088kB
[  OK  ] Stopped Journa[   29.347845] isci 0000:02:00.0: OEM SAS parameters (version: 1.3) loaded (firmware)
l Service.
[   29.358130] systemd[1]: Starting Journal Service...
         Starting Journal Servic[   29.367713] vmalloc: allocation failure, allocated 49369088 of 82141184 bytes
e...
[   29.375098] systemd-udevd: page allocation failure: order:0, mode:0xd2
[   29.382169] CPU: 0 PID: 213 Comm: systemd-udevd Not tainted 3.19.0-rc2+ #93
[   29.389151] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v01.02 03/09/2012
[   29.397874]  0000000000000000 0000000040da54f4 ffff880035cdfcf8 ffffffff8173f728
[   29.405367]  0000000000000000 00000000000000d2 ffff880035cdfd88 ffffffff81191ef9
[   29.412884]  ffffffff81a42ed0 ffff880035cdfd18 0000000000000018 ffff880035cdfd98
[   29.420383] Call Trace:
[   29.422842]  [<ffffffff8173f728>] dump_stack+0x45/0x57
[   29.428000]  [<ffffffff81191ef9>] warn_alloc_failed+0xf9/0x160
[   29.433858]  [<ffffffff811dd161>] ? alloc_pages_current+0x91/0x100
[   29.440054]  [<ffffffff811ccef8>] __vmalloc_node_range+0x248/0x280
[   29.446256]  [<ffffffff81110085>] ? copy_module_from_fd.isra.48+0xe5/0x180
[   29.453155]  [<ffffffff811cd19b>] vmalloc+0x4b/0x50
[   29.458054]  [<ffffffff81110085>] ? copy_module_from_fd.isra.48+0xe5/0x180
[   29.464950]  [<ffffffff81110085>] copy_module_from_fd.isra.48+0xe5/0x180
[   29.471674]  [<ffffffff811140df>] SyS_finit_module+0x6f/0xd0
[   29.477356]  [<ffffffff81747069>] system_call_fastpath+0x12/0x17
[   29.483380] Mem-Info:
[   29.485667] Node 0 DMA per-cpu:
[   29.488834] CPU    0: hi:    0, btch:   1 usd:   0
[   29.493642] Node 0 DMA32 per-cpu:
[   29.496982] CPU    0: hi:   90, btch:  15 usd:  53
[   29.501785] active_anon:582 inactive_anon:1027 isolated_anon:0
[   29.501785]  active_file:0 inactive_file:0 isolated_file:0
[   29.501785]  unevictable:39647 dirty:0 writeback:0 unstable:0
[   29.501785]  free:0 slab_reclaimable:1835 slab_unreclaimable:3404
[   29.501785]  mapped:1089 shmem:1037 pagetables:108 bounce:0
[   29.501785]  free_cma:0
[   29.532945] Node 0 DMA free:0kB min:4kB low:4kB high:4kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB iss
[   29.571086] lowmem_reserve[]: 0 233 233 233
[   29.575389] Node 0 DMA32 free:0kB min:1944kB low:2428kB high:2916kB active_anon:2328kB inactive_anon:4108kB active_file:0kB inactive_file:0kB unevictable:158588kBs
[   29.617544] lowmem_reserve[]: 0 0 0 0
[   29.621324] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 0kB
[   29.631920] Node 0 DMA32: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 0kB
[   29.642688] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[   29.651152] 40684 total pagecache pages
[   29.655003] 0 pages in swap cache
[   29.658334] Swap cache stats: add 0, delete 0, find 0/0
[   29.663583] Free swap  = 0kB
[   29.666476] Total swap = 0kB
[   29.669373] 65531 pages RAM
[   29.672182] 0 pages HighMem/MovableOnly
[   29.676039] 4986 pages reserved
[   29.679194] 0 pages hwpoisoned
[  OK  ] Started Journa[   29.686692] systemd-journald[232]: File /run/log/journal/5504ea9d96a745d3bfa88caececd2740/system.journal corrupted or uncleanly shut down, .
l Service.
[   29.703496] systemd[1]: Started Journal Service.
[  OK  ] Started dracut initqueue hook.
[  OK  ] Reached target Initrd Root File System.
         Starting Reload Configu[   29.726403] isci 0000:02:00.0: SCU controller 0: phy 3-0 cables: {short, short, short, short}
ration from the Real Root...
[  OK  ] Reached target Remote File Systems (Pre).
[  OK  ] Reached target Remote File Systems.
[   29.760493] scsi host7: ata_generic
[   29.771845] scsi host6: isci
[   29.780869] scsi host8: ata_generic
[   29.791001] ata7: PATA max UDMA/100 cmd 0xf0b0 ctl 0xf0a0 bmdma 0xf070 irq 18
[   29.798170] ata8: PATA max UDMA/100 cmd 0xf090 ctl 0xf080 bmdma 0xf078 irq 18
[  OK  ] Started Reload Configuration f[   29.817718] dmar: DRHD: handling fault status reg 702
[   29.823891] dmar: INTR-REMAP: Request device [[02:00.0] fault index 22
[   29.823891] INTR-REMAP:[fault reason 38] Blocked an interrupt request due to source-id verification failure
rom the Real Root.
[  OK  ] Reached target Initrd File Systems.
[  OK  ] Reached target Initrd Default Target.
[   30.249111] pps_core: LinuxPPS API ver. 1 registered
[   30.254100] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[   30.288618] PTP clock support registered
[   30.349920] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[   30.355764] e1000e: Copyright(c) 1999 - 2014 Intel Corporation.
[   30.383553] e1000e 0000:00:19.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[   30.394670] tulip: Linux Tulip driver version 1.1.15 (Feb 27, 2007)
[   30.401642] tulip: tulip_init_one: Enabled WOL support for AN983B
[   30.407754] dmar: DRHD: handling fault status reg 2
[   30.412634] dmar: DMAR:[DMA Write] Request device [00:1e.0] fault addr 0 
[   30.412634] DMAR:[fault reason 05] PTE Write access is not set
[   30.426642] tulip 0000:09:04.0 (unnamed net_device) (uninitialized): tulip_stop_rxtx() failed (CSR5 0xfc0dc0d2 CSR6 0xff970111)
[   30.438566] tulip0:  MII transceiver #1 config 1000 status 786d advertising 05e1
[   30.462753] net eth0: ADMtek Comet rev 17 at MMIO 0xd7121000, 00:b0:c0:06:70:90, IRQ 20
[   30.548322] firewire_ohci 0000:09:05.0: added OHCI v1.0 device as card 0, 8 IR + 8 IT contexts, quirks 0x0
[   30.689459] e1000e 0000:00:19.0 eth1: registered PHC clock
[   30.694975] e1000e 0000:00:19.0 eth1: (PCI Express:2.5GT/s:Width x1) 80:c1:6e:f8:9f:92
[   30.702925] e1000e 0000:00:19.0 eth1: Intel(R) PRO/1000 Network Connection
[   30.711299] e1000e 0000:00:19.0 eth1: MAC: 10, PHY: 11, PBA No: 0100FF-0FF
[   30.822844] e1000e 0000:00:19.0 em1: renamed from eth1
[   30.828497] tulip 0000:09:04.0 p6p1: renamed from eth0
[   30.833799] systemd-udevd[233]: renamed network interface eth1 to em1
[   30.840351] systemd-udevd[214]: renamed network interface eth0 to p6p1
[   30.850352] iTCO_vendor_support: vendor-support=0
[   30.860111] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
[   30.865760] iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS
[   31.068066] firewire_core 0000:09:05.0: created device fw0: GUID 0060b000008cec98, S400

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
  2015-01-06  6:37 ` Baoquan He
@ 2015-01-06  7:05   ` Li, ZhenHua
  0 siblings, 0 replies; 21+ messages in thread
From: Li, ZhenHua @ 2015-01-06  7:05 UTC (permalink / raw)
  To: Baoquan He, indou.takao
  Cc: dwmw2, joro, vgoyal, dyoung, iommu, linux-kernel, linux-pci,
	kexec, alex.williamson, ddutile, ishii.hironobu, bhelgaas,
	doug.hatch, jerry.hoemann, tom.vaden, li.zhang6, lisa.mitchell,
	billsumnerlinux

According to Takao Indoh's testing, seems adding flush after loading old 
irte and updating old irte does not fix the dmar faults.

According to Takao Indoh's log and your log, the faults happens while 
and after driver is loaded.  Maybe I am using incorrect code in 08/10.


On 01/06/2015 02:37 PM, Baoquan He wrote:
> Hi Zhenhua,
>
> I just tested your patchset based on 3.19.0-rc2+, and found several dmar
> fault and intr-remap fault, it seems not the same as Takao's, please
> check the attachment.
>
> Thanks
> Baoquan
>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel
@ 2014-12-15  9:52 Li, Zhen-Hua
  0 siblings, 0 replies; 21+ messages in thread
From: Li, Zhen-Hua @ 2014-12-15  9:52 UTC (permalink / raw)
  To: dwmw2, indou.takao, bhe, joro, vgoyal, dyoung, billsumnerlinux,
	zhen-hual
  Cc: iommu, kexec, linux-kernel, linux-pci, alex.williamson, ddutile,
	ishii.hironobu, bhelgaas, doug.hatch, jerry.hoemann, tom.vaden,
	li.zhang6, lisa.mitchell

This patchset is an update of Bill Sumner's patchset, implements a fix for:
If a kernel boots with intel_iommu=on on a system that supports intel vt-d, 
when a panic happens, the kdump kernel will boot with these faults:

    dmar: DRHD: handling fault status reg 102
    dmar: DMAR:[DMA Read] Request device [01:00.0] fault addr fff80000
    DMAR:[fault reason 01] Present bit in root entry is clear

    dmar: DRHD: handling fault status reg 2
    dmar: INTR-REMAP: Request device [[61:00.0] fault index 42
    INTR-REMAP:[fault reason 34] Present field in the IRTE entry is clear

On some system, the interrupt remapping fault will also happen even if the 
intel_iommu is not set to on, because the interrupt remapping will be enabled 
when x2apic is needed by the system.

The cause of the DMA fault is described in Bill's original version, and the 
INTR-Remap fault is caused by a similar reason. In short, the initialization 
of vt-d drivers causes the in-flight DMA and interrupt requests get wrong 
response.

To fix this problem, we modifies the behaviors of the intel vt-d in the 
crashdump kernel:

For DMA Remapping:
1. To accept the vt-d hardware in an active state,
2. Do not disable and re-enable the translation, keep it enabled.
3. Use the old root entry table, do not rewrite the RTA register.
4. Malloc and use new context entry table and page table, copy data from the 
   old ones that used by the old kernel.
5. to use different portions of the iova address ranges for the device drivers
   in the crashdump kernel than the iova ranges that were in-use at the time
   of the panic.  
6. After device driver is loaded, when it issues the first dma_map command, 
   free the dmar_domain structure for this device, and generate a new one, so 
   that the device can be assigned a new and empty page table. 
7. When a new context entry table is generated, we also save its address to 
   the old root entry table.

For Interrupt Remapping:
1. To accept the vt-d hardware in an active state,
2. Do not disable and re-enable the interrupt remapping, keep it enabled.
3. Use the old interrupt remapping table, do not rewrite the IRTA register.
4. When ioapic entry is setup, the interrupt remapping table is changed, and 
   the updated data will be stored to the old interrupt remapping table.

Advantages of this approach:
1. All manipulation of the IO-device is done by the Linux device-driver
   for that device.
2. This approach behaves in a manner very similar to operation without an
   active iommu.
3. Any activity between the IO-device and its RMRR areas is handled by the
   device-driver in the same manner as during a non-kdump boot.
4. If an IO-device has no driver in the kdump kernel, it is simply left alone.
   This supports the practice of creating a special kdump kernel without
   drivers for any devices that are not required for taking a crashdump. 
5. Minimal code-changes among the existing mainline intel vt-d code.

Summary of changes in this patch set:
1. Added some useful function for root entry table in code intel-iommu.c
2. Added new members to struct root_entry and struct irte;
3. Functions to load old root entry table to iommu->root_entry from the memory 
   of old kernel.
4. Functions to malloc new context entry table and page table and copy the data
   from the old ones to the malloced new ones.
5. Functions to enable support for DMA remapping in kdump kernel.
6. Functions to load old irte data from the old kernel to the kdump kernel.
7. Some code changes that support other behaviours that have been listed.
8. In the new functions, use physical address as "unsigned long" type, not 
   pointers.

Original version by Bill Sumner:
        https://lkml.org/lkml/2014/1/10/518
        https://lkml.org/lkml/2014/4/15/716
        https://lkml.org/lkml/2014/4/24/836

Zhenhua's last of Bill's patchset:
        https://lkml.org/lkml/2014/10/21/134

Changed in this version:
1. Do not disable and re-enable traslation and interrupt remapping. 
2. Use old root entry table.
3. Use old interrupt remapping table.

This patchset should be applied with this one together:
	https://lkml.org/lkml/2014/11/5/43
	x86/iommu: fix incorrect bit operations in setting values

Bill Sumner (5):
  iommu/vt-d: Update iommu_attach_domain() and its callers
  iommu/vt-d: Items required for kdump
  iommu/vt-d: data types and functions used for kdump
  iommu/vt-d: Add domain-id functions
  iommu/vt-d: enable kdump support in iommu module

Li, Zhen-Hua (10):
  iommu/vt-d: Update iommu_attach_domain() and its callers
  iommu/vt-d: Items required for kdump
  iommu/vt-d: Add domain-id functions
  iommu/vt-d: functions to copy data from old mem
  iommu/vt-d: Add functions to load and save old re
  iommu/vt-d: datatypes and functions used for kdump
  iommu/vt-d: enable kdump support in iommu module
  iommu/vtd: assign new page table for dma_map
  iommu/vt-d: Copy functions for irte
  iommu/vt-d: Use old irte in kdump kernel

 drivers/iommu/intel-iommu.c         | 1023 +++++++++++++++++++++++++++++++++--
 drivers/iommu/intel_irq_remapping.c |   99 +++-
 include/linux/intel-iommu.h         |   18 +
 3 files changed, 1097 insertions(+), 43 deletions(-)

-- 
2.0.0-rc0


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2015-01-06  7:06 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-22  9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 03/10] iommu/vt-d: Add domain-id functions Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 05/10] iommu/vt-d: Add functions to load and save old re Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 08/10] iommu/vtd: assign new page table for dma_map Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
2014-12-22  9:15 ` [PATCH 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
2014-12-22  9:43 ` [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults " Li, ZhenHua
2014-12-26  5:13 ` Takao Indoh
2014-12-26  6:46   ` Li, ZhenHua
2014-12-26  7:27     ` Takao Indoh
2014-12-29  3:15       ` Li, ZhenHua
2015-01-06  0:18         ` Takao Indoh
2015-01-06  2:04           ` Li, ZhenHua
2015-01-06  6:37 ` Baoquan He
2015-01-06  7:05   ` Li, ZhenHua
  -- strict thread matches above, loose matches on Subject: below --
2014-12-15  9:52 Li, Zhen-Hua

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).