linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Li, ZhenHua" <zhen-hual@hp.com>
To: Baoquan He <bhe@redhat.com>
Cc: dwmw2@infradead.org, indou.takao@jp.fujitsu.com, joro@8bytes.org,
	vgoyal@redhat.com, dyoung@redhat.com, jerry.hoemann@hp.com,
	tom.vaden@hp.com, rwright@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, billsumnerlinux@gmail.com, li.zhang6@hp.com
Subject: Re: [PATCH v8 06/10] iommu/vt-d: datatypes and functions used for kdump
Date: Thu, 15 Jan 2015 13:45:19 +0800	[thread overview]
Message-ID: <54B753EF.30609@hp.com> (raw)
In-Reply-To: <20150115032858.GA2461@dhcp-16-105.nay.redhat.com>

Hi Baoquan,
Thank you very much for your review. But according to the latest
discussion, the page tables will not be copied from old kernel. We keep
using the old page tables before driver is loaded. So there are many
changes in next version;

See my comments.

On 01/15/2015 11:28 AM, Baoquan He wrote:
> On 01/12/15 at 03:06pm, Li, Zhen-Hua wrote:
>> +/*
>> + * 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)
>
> The argument g_num_of_iommus is the same as the global variable, it's better
> to rename it as num_of_iommus. And even it can be removed since you can
> just use the global variable g_num_of_iommus in this function.
>
> Argument drhd can be intel_iommu because no other member variable in
> drhd is needed.

This function is no longer used. So forget the parameters.

>
>> +{
>> +	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 */
>
> This initializing should not be here, because it's not only for this
> drhd. It should be done in init_dmars().
>
Yes you are right. Though the variable domain_values_list will not be
used in next version, I think I need to check if there are any other
similar problems.

>> +	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_flush_cache(iommu, iommu->root_entry, PAGE_SIZE);
>> +	__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
>>
>>
>> _______________________________________________
>> kexec mailing list
>> kexec@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/kexec


  reply	other threads:[~2015-01-15  5:46 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-12  7:06 [PATCH v8 0/10] iommu/vt-d: Fix intel vt-d faults in kdump kernel Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 01/10] iommu/vt-d: Update iommu_attach_domain() and its callers Li, Zhen-Hua
2015-01-12 15:18   ` Joerg Roedel
2015-01-13  1:28     ` Li, ZhenHua
2015-01-12  7:06 ` [PATCH v8 02/10] iommu/vt-d: Items required for kdump Li, Zhen-Hua
2015-01-12 15:22   ` Joerg Roedel
2015-01-12 15:29     ` Vivek Goyal
2015-01-12 16:06       ` Joerg Roedel
2015-01-12 16:15         ` Vivek Goyal
2015-01-12 16:48           ` Joerg Roedel
2015-01-13 11:41       ` Baoquan He
2015-01-13  8:12     ` Li, ZhenHua
2015-01-13 11:52       ` Joerg Roedel
2015-01-12  7:06 ` [PATCH v8 03/10] iommu/vt-d: Add domain-id functions Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 04/10] iommu/vt-d: functions to copy data from old mem Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 05/10] iommu/vt-d: Add functions to load and save old re Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 06/10] iommu/vt-d: datatypes and functions used for kdump Li, Zhen-Hua
2015-01-15  3:28   ` Baoquan He
2015-01-15  5:45     ` Li, ZhenHua [this message]
2015-01-15  7:01       ` Baoquan He
2015-01-12  7:06 ` [PATCH v8 07/10] iommu/vt-d: enable kdump support in iommu module Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 08/10] iommu/vt-d: assign new page table for dma_map Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 09/10] iommu/vt-d: Copy functions for irte Li, Zhen-Hua
2015-01-12  7:06 ` [PATCH v8 10/10] iommu/vt-d: Use old irte in kdump kernel Li, Zhen-Hua
2015-01-12  8:00 ` [PATCH v8 0/10] iommu/vt-d: Fix intel vt-d faults " Li, ZhenHua
2015-01-12  9:07   ` Baoquan He
2015-01-12  9:28     ` Li, ZhenHua

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=54B753EF.30609@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=rwright@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;
as well as URLs for NNTP newsgroup(s).