From: Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: "Li, Zhen-Hua" <zhen-hual-VXdhtT5mjnY@public.gmane.org>
Cc: tom.vaden-VXdhtT5mjnY@public.gmane.org,
rwright-VXdhtT5mjnY@public.gmane.org,
dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
lisa.mitchell-VXdhtT5mjnY@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
doug.hatch-VXdhtT5mjnY@public.gmane.org,
ishii.hironobu-+CUm20s59erQFUHtdCDX3A@public.gmane.org,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
billsumnerlinux-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
li.zhang6-VXdhtT5mjnY@public.gmane.org,
dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH v11 06/10] iommu/vt-d: datatypes and functions used for kdump
Date: Wed, 13 May 2015 16:56:09 +0800 [thread overview]
Message-ID: <20150513085609.GD3736@dhcp-128-28.nay.redhat.com> (raw)
In-Reply-To: <1431337974-545-7-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
On 05/11/15 at 05:52pm, Li, Zhen-Hua wrote:
> 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:
> Use old root entry table, and load the old data to root_entry as cache.
> Malloc new context table and copy old context table to the new one.
>
> Bill Sumner:
> Original version, the creation of the data types and functions.
>
> Li, Zhenhua:
> Create new function iommu_check_pre_te_status() to check status.
> Update the caller of context_get_* and context_put*, use context_*
> and context_set_* for replacement.
> Update the name of the function that loads root entry table.
> Use new function to copy old context entry tables and page tables.
> Use "unsigned long" for physical address.
> Remove the functions to copy page table in Bill's version.
> Remove usage of dve and ppap in Bill's version.
>
> Signed-off-by: Bill Sumner <billsumnerlinux-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Li, Zhen-Hua <zhen-hual-VXdhtT5mjnY@public.gmane.org>
> ---
> drivers/iommu/intel-iommu.c | 121 ++++++++++++++++++++++++++++++++++++++++++++
> include/linux/intel-iommu.h | 3 ++
> 2 files changed, 124 insertions(+)
>
> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
> index 3a5d446..28c3c64 100644
> --- a/drivers/iommu/intel-iommu.c
> +++ b/drivers/iommu/intel-iommu.c
> @@ -386,6 +386,18 @@ 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()
> + * ------------------------------------------------------------------------
> + */
> +
> +static int copy_root_entry_table(struct intel_iommu *iommu);
> +
> +static int intel_iommu_load_translation_tables(struct intel_iommu *iommu);
> +
> +static void iommu_check_pre_te_status(struct intel_iommu *iommu);
> +
> /*
> * This domain is a statically identity mapping domain.
> * 1. This domain creats a static 1:1 mapping to all usable memory.
> @@ -4987,3 +4999,112 @@ static void __iommu_update_old_root_entry(struct intel_iommu *iommu, int index)
> __iommu_flush_cache(iommu, to + start, size);
> }
>
> +/*
> + * Load root entry tables from old kernel.
> + */
> +static int copy_root_entry_table(struct intel_iommu *iommu)
> +{
> + u32 bus; /* Index: root-entry-table */
> + struct root_entry *re; /* Virt(iterator: new table) */
> + unsigned long context_old_phys; /* Phys(context table entry) */
> + struct context_entry *context_new_virt; /* Virt(new context_entry) */
> +
> + /*
> + * A new root entry table has been allocated ,
> + * we need copy re from old kernel to the new allocated one.
> + */
> +
> + 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_virt =
> + (struct context_entry *)alloc_pgtable_page(iommu->node);
> +
> + if (!context_new_virt)
> + return -ENOMEM;
> +
> + __iommu_load_from_oldmem(context_new_virt,
> + context_old_phys,
> + VTD_PAGE_SIZE);
> +
> + __iommu_flush_cache(iommu, context_new_virt, VTD_PAGE_SIZE);
> +
> + set_root_value(re, virt_to_phys(context_new_virt));
> + }
> +
> + return 0;
> +}
> +
> +/*
> + * Interface to the "load translation tables" set of functions
> + * from mainline code.
> + */
> +static int intel_iommu_load_translation_tables(struct intel_iommu *iommu)
> +{
> + unsigned long long q; /* quadword scratch */
> + int ret = 0; /* Integer return code */
> + unsigned long flags;
> +
> + q = dmar_readq(iommu->reg + DMAR_RTADDR_REG);
> + if (!q)
> + return -1;
> +
> + spin_lock_irqsave(&iommu->lock, flags);
> +
> + /* Load the root-entry table from the old kernel
> + * foreach context_entry_table in root_entry
> + * Copy each entry table from old kernel
> + */
> + 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;
> + }
> +
I didn't find where you call iounmap to free mapping of
iommu->root_entry_old_phys. Am I missing anything?
> + 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;
> + }
next prev parent reply other threads:[~2015-05-13 8:56 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-11 9:52 [PATCH v11 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
[not found] ` <1431337974-545-1-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
2015-05-11 9:52 ` [PATCH v11 01/10] iommu/vt-d: New function to attach domain with id Li, Zhen-Hua
2015-05-11 9:52 ` [PATCH v11 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
2015-05-12 8:17 ` Dave Young
2015-05-13 1:45 ` Li, ZhenHua
2015-05-13 6:31 ` Alexander Duyck
[not found] ` <5552ACB9.5050309-VXdhtT5mjnY@public.gmane.org>
2015-05-13 8:42 ` Dave Young
2015-05-11 9:52 ` [PATCH v11 03/10] iommu/vt-d: Function to get existing context entry Li, Zhen-Hua
2015-05-11 9:52 ` [PATCH v11 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
[not found] ` <1431337974-545-5-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
2015-05-12 8:29 ` Dave Young
2015-05-13 9:00 ` Baoquan He
2015-05-13 9:13 ` Li, ZhenHua
2015-05-13 9:21 ` Baoquan He
2015-06-08 14:15 ` David Woodhouse
[not found] ` <1433772935.2952.47.camel-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2015-06-08 15:21 ` Joerg Roedel
2015-06-08 15:44 ` David Woodhouse
2015-05-11 9:52 ` [PATCH v11 05/10] iommu/vt-d: Add functions to load and save old re Li, Zhen-Hua
[not found] ` <1431337974-545-6-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
2015-05-12 8:37 ` Dave Young
[not found] ` <20150512083745.GE4561-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2015-05-13 1:47 ` Li, ZhenHua
2015-05-13 8:49 ` Dave Young
2015-05-11 9:52 ` [PATCH v11 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
2015-05-12 8:48 ` Dave Young
[not found] ` <1431337974-545-7-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
2015-05-13 8:56 ` Baoquan He [this message]
[not found] ` <20150513085609.GD3736-0VdLhd/A9PlfpSRLqpFUpR/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
2015-05-13 8:58 ` Li, ZhenHua
[not found] ` <55531231.6040506-VXdhtT5mjnY@public.gmane.org>
2015-05-13 9:10 ` Baoquan He
2015-05-11 9:52 ` [PATCH v11 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
[not found] ` <1431337974-545-8-git-send-email-zhen-hual-VXdhtT5mjnY@public.gmane.org>
2015-05-12 8:52 ` Dave Young
2015-05-13 2:10 ` Baoquan He
2015-05-13 2:28 ` Li, ZhenHua
2015-05-13 2:36 ` Baoquan He
2015-05-11 9:52 ` [PATCH v11 08/10] iommu/vt-d: assign new page table for dma_map Li, Zhen-Hua
2015-05-20 23:52 ` Baoquan He
2015-05-21 1:27 ` Li, ZhenHua
2015-05-21 6:54 ` Baoquan He
[not found] ` <20150521065451.GA23661-0VdLhd/A9PlfpSRLqpFUpR/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
2015-05-21 8:40 ` Li, ZhenHua
2015-05-21 10:11 ` Baoquan He
2015-05-11 9:52 ` [PATCH v11 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
2015-05-12 9:00 ` Dave Young
2015-05-11 9:52 ` [PATCH v11 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
2015-05-12 6:18 ` [PATCH v11 0/10] iommu/vt-d: Fix intel vt-d faults " Baoquan He
2015-05-12 9:04 ` Dave Young
2015-05-12 9:34 ` Li, Zhen-Hua
2015-06-08 14:26 ` David Woodhouse
[not found] ` <1433773583.2952.52.camel-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2015-06-08 15:29 ` Joerg Roedel
[not found] ` <20150608152957.GW20384-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-06-08 15:50 ` David Woodhouse
2015-06-08 16:13 ` Joerg Roedel
2015-06-09 12:55 ` David Woodhouse
2015-06-10 9:21 ` Joerg Roedel
[not found] ` <20150610092150.GZ20384-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-06-10 9:32 ` Li, ZhenHua
[not found] ` <5578042D.9050407-VXdhtT5mjnY@public.gmane.org>
2015-06-10 14:10 ` David Woodhouse
2015-05-13 1:54 ` Li, ZhenHua
[not found] ` <5552AEE9.80408-VXdhtT5mjnY@public.gmane.org>
2015-05-18 10:05 ` Li, ZhenHua
2015-05-19 1:13 ` Dave Young
2015-05-19 7:43 ` Li, ZhenHua
2015-05-29 16:21 ` Joerg Roedel
[not found] ` <20150529162151.GB20384-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-05-30 11:23 ` 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=20150513085609.GD3736@dhcp-128-28.nay.redhat.com \
--to=bhe-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=billsumnerlinux-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=doug.hatch-VXdhtT5mjnY@public.gmane.org \
--cc=dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=ishii.hironobu-+CUm20s59erQFUHtdCDX3A@public.gmane.org \
--cc=kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=li.zhang6-VXdhtT5mjnY@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lisa.mitchell-VXdhtT5mjnY@public.gmane.org \
--cc=rwright-VXdhtT5mjnY@public.gmane.org \
--cc=tom.vaden-VXdhtT5mjnY@public.gmane.org \
--cc=vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=zhen-hual-VXdhtT5mjnY@public.gmane.org \
/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