From: "Li, Zhen-Hua" <zhen-hual@hp.com>
To: dwmw2@infradead.org, indou.takao@jp.fujitsu.com, bhe@redhat.com,
joro@8bytes.org, vgoyal@redhat.com, dyoung@redhat.com,
billsumnerlinux@gmail.com, zhen-hual@hp.com
Cc: jerry.hoemann@hp.com, tom.vaden@hp.com,
linux-pci@vger.kernel.org, kexec@lists.infradead.org,
iommu@lists.linux-foundation.org, lisa.mitchell@hp.com,
linux-kernel@vger.kernel.org, alex.williamson@redhat.com,
ddutile@redhat.com, doug.hatch@hp.com,
ishii.hironobu@jp.fujitsu.com, bhelgaas@google.com,
li.zhang6@hp.com
Subject: [PATCH 05/10] iommu/vt-d: Add functions to load and save old re
Date: Mon, 15 Dec 2014 17:53:01 +0800 [thread overview]
Message-ID: <1418637186-9988-6-git-send-email-zhen-hual@hp.com> (raw)
In-Reply-To: <1418637186-9988-1-git-send-email-zhen-hual@hp.com>
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
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2014-12-15 9:54 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-15 9:52 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
2014-12-15 9:52 ` [PATCH 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
2014-12-15 9:52 ` [PATCH 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
2014-12-15 9:52 ` [PATCH 03/10] iommu/vt-d: Add domain-id functions Li, Zhen-Hua
2014-12-15 9:53 ` [PATCH 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
2014-12-15 9:53 ` Li, Zhen-Hua [this message]
2014-12-15 9:53 ` [PATCH 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
2014-12-15 9:53 ` [PATCH 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
2014-12-15 9:53 ` [PATCH 08/10] iommu/vtd: assign new page table for dma_map Li, Zhen-Hua
2014-12-15 9:53 ` [PATCH 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
2014-12-15 9:53 ` [PATCH 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
-- strict thread matches above, loose matches on Subject: below --
2014-12-22 9:15 [PATCH 0/10] iommu/vt-d: Fix intel vt-d faults " 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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1418637186-9988-6-git-send-email-zhen-hual@hp.com \
--to=zhen-hual@hp.com \
--cc=alex.williamson@redhat.com \
--cc=bhe@redhat.com \
--cc=bhelgaas@google.com \
--cc=billsumnerlinux@gmail.com \
--cc=ddutile@redhat.com \
--cc=doug.hatch@hp.com \
--cc=dwmw2@infradead.org \
--cc=dyoung@redhat.com \
--cc=indou.takao@jp.fujitsu.com \
--cc=iommu@lists.linux-foundation.org \
--cc=ishii.hironobu@jp.fujitsu.com \
--cc=jerry.hoemann@hp.com \
--cc=joro@8bytes.org \
--cc=kexec@lists.infradead.org \
--cc=li.zhang6@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lisa.mitchell@hp.com \
--cc=tom.vaden@hp.com \
--cc=vgoyal@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox