From: Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
Cc: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Vincent.Wan-5C7GfCeVMHo@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH v5 4/8] iommu/amd: Add function copy_dev_tables
Date: Wed, 21 Sep 2016 18:17:09 +0800 [thread overview]
Message-ID: <20160921101709.GA13350@x1.redhat.com> (raw)
In-Reply-To: <20160920115804.GC3541-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
Hi Joerg,
Thanks for your reviewing and great suggestion!
On 09/20/16 at 01:58pm, Joerg Roedel wrote:
> Hi Baoquan,
>
> On Thu, Sep 15, 2016 at 11:03:22PM +0800, Baoquan He wrote:
> > +static int copy_dev_tables(void)
> > +{
> > + u64 entry;
> > + u32 lo, hi, devid;
> > + phys_addr_t old_devtb_phys;
> > + struct dev_table_entry *old_devtb = NULL;
> > + u16 dom_id, dte_v;
> > + struct amd_iommu *iommu;
> > + static int copied;
>
> Please order this by line-length, longer lines first.
Will do.
>
> > + for_each_iommu(iommu) {
> > + if (!translation_pre_enabled(iommu)) {
> > + pr_err("IOMMU:%d is not pre-enabled!/n", iommu->index);
> > + return -1;
> > + }
> > +
> > + if (copied)
> > + continue;
> > +
> > + lo = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET);
> > + hi = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET + 4);
> > + entry = (((u64) hi) << 32) + lo;
> > + old_devtb_phys = entry & PAGE_MASK;
> > + old_devtb = memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB);
> > + if (!old_devtb)
> > + return -1;
> > + for (devid = 0; devid <= amd_iommu_last_bdf; ++devid) {
> > + amd_iommu_dev_table[devid] = old_devtb[devid];
> > + dom_id = amd_iommu_dev_table[devid].data[1] & DEV_DOMID_MASK;
> > + dte_v = amd_iommu_dev_table[devid].data[0] & DTE_FLAG_V;
> > + if (!dte_v || !dom_id)
> > + continue;
> > + __set_bit(dom_id, amd_iommu_pd_alloc_bitmap);
> > + }
> > + memunmap(old_devtb);
> > + copied = 1;
> > + }
>
> This loop need more refinement and sanity checking code. I suggest using
> two loops and do the sanity checking in the first one. The sanity checks
> should do:
>
> * Check whether all IOMMUs actually use the same device table
> with the same size
>
> * Verify that the size of the old device table is the expected
> size.
Will do.
>
> * Also sanity check the irq-remapping information and remapping
> table sizes.
Will do. Since this need those irq DTE_IRQ_xxxx MACRO which is defined
in amd_iommu.c , I plan to move them into amd_iommu_types.h, and then do
irq-remapping. These can be made in another patch.
>
> If any of these checks fail, just bail out of copying.
>
> What is further needed it some more selection on what is copied from the
> old kernel. There is no need to copy all the GCR3 root-pointer
> information. If a device is set up with guest translations (DTE.GV=1),
> then don't copy that information but move the device over to an empty
> guest-cr3 table and handle the faults in the PPR log (which should just
> answer them with INVALID). After all these PPR faults are recoverable
> for the device and we should not allow the device to change old-kernels
> data when we don't have to.
The current fix is simplest and cleanest. Because the on-flight DMAs
continue transferring data since system crash, including guest
translations, we may not need to care about it and just let it continue
flying a little more time until device is reset. Since you have suggested,
I will try to make another patch for this issue, we can see the effect.
Thanks
Baoquan
next prev parent reply other threads:[~2016-09-21 10:17 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-15 15:03 [PATCH v5 0/8] Fix kdump faults on system with amd iommu Baoquan He
[not found] ` <1473951806-25511-1-git-send-email-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-09-15 15:03 ` [PATCH v5 1/8] iommu/amd: Detect pre enabled translation Baoquan He
2016-09-15 15:03 ` [PATCH v5 2/8] iommu/amd: add early_enable_iommu() wrapper function Baoquan He
2016-09-15 15:03 ` [PATCH v5 3/8] iommu/amd: Define bit fields for DTE particularly Baoquan He
2016-09-15 15:03 ` [PATCH v5 4/8] iommu/amd: Add function copy_dev_tables Baoquan He
2016-09-20 11:58 ` Joerg Roedel
[not found] ` <20160920115804.GC3541-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2016-09-21 10:17 ` Baoquan He [this message]
2016-09-15 15:03 ` [PATCH v5 5/8] iommu/amd: copy old trans table from old kernel Baoquan He
[not found] ` <1473951806-25511-6-git-send-email-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-09-20 12:40 ` Joerg Roedel
[not found] ` <20160920124031.GD3541-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2016-09-21 10:18 ` Baoquan He
2016-09-28 1:37 ` Baoquan He
[not found] ` <20160928013702.GH14155-ejN7fcUYdH/by3iVrkZq2A@public.gmane.org>
2016-09-28 13:01 ` Baoquan He
2016-09-15 15:03 ` [PATCH v5 6/8] iommu/amd: Do not re-enable dev table entries in kdump Baoquan He
[not found] ` <1473951806-25511-7-git-send-email-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-09-20 12:42 ` Joerg Roedel
[not found] ` <20160920124241.GE3541-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2016-09-21 10:20 ` Baoquan He
2016-09-15 15:03 ` [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry at iommu init stage Baoquan He
[not found] ` <1473951806-25511-8-git-send-email-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-09-20 12:50 ` Joerg Roedel
2016-09-21 10:26 ` Baoquan He
[not found] ` <20160921102613.GD13350-ejN7fcUYdH/by3iVrkZq2A@public.gmane.org>
2016-09-21 13:21 ` Baoquan He
2016-09-15 15:03 ` [PATCH v5 8/8] iommu/amd: Update domain into to dte entry during device driver init Baoquan He
2016-09-20 12:53 ` Joerg Roedel
[not found] ` <20160920125330.GG3541-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2016-09-21 10:31 ` Baoquan He
2016-09-27 1:51 ` Baoquan He
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=20160921101709.GA13350@x1.redhat.com \
--to=bhe-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=Vincent.Wan-5C7GfCeVMHo@public.gmane.org \
--cc=dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@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;
as well as URLs for NNTP newsgroup(s).