Re: [PATCH v5 5/8] iommu/amd: copy old trans table from old kernel

From: Baoquan He
Date: Tue Sep 27 2016 - 21:37:21 EST


Hi Joerg,

On 09/20/16 at 02:40pm, Joerg Roedel wrote:
> > + if ( !is_pre_enabled) {
> > + for_each_iommu(iommu)
> > + early_enable_iommu(iommu);
> > + } else {
> > + if (copy_dev_tables()) {
> > + pr_err("Failed to copy DEV table from previous kernel.\n");
> > + /*
> > + * If failed to copy dev tables from old kernel, continue to proceed
> > + * as it does in normal kernel.
> > + */
> > + for_each_iommu(iommu) {
> > + clear_translation_pre_enabled(iommu);
> > + early_enable_iommu(iommu);
> > + }
> > + } else {
> > + pr_info("Copied DEV table from previous kernel.\n");
> > + for_each_iommu(iommu) {
> > + iommu_feature_disable(iommu, CONTROL_CMDBUF_EN);
> > + iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN);
>
> Could you move that into new helpers (iommu_disable_command_buffer...)?

Did you mean wraping iommu_feature_disable(iommu, CONTROL_CMDBUF_EN) into a
helper function like iommu_disable_command_buffer(), and wraping
iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN) into
iommu_disable_event_buffer()?

I retest with not disabling command buffer and event log here, it works
on amd iommu v1 and v2 systems. So if I understand your comment
correctly, there's no need to add "iommu_feature_disable(iommu,
CONTROL_CMDBUF_EN)" and "iommu_feature_disable(iommu,
CONTROL_EVT_LOG_EN)" here. I remember I added them here because more
IO_PAGE_FAULT messages are printed without them. But now it seems not to
related to them. So I will remove above two lines of code.

>
> > + iommu_enable_command_buffer(iommu);
> > + iommu_enable_event_buffer(iommu);
> > + iommu_set_device_table(iommu);
> > + iommu_flush_all_caches(iommu);
> > + }
> > + }
> > + }
> > }
> >
> > static void enable_iommus_v2(void)
> > --
> > 2.5.5
> >