[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LNX.2.20.13.2006152346320.21123@monopod.intra.ispras.ru>
Date: Mon, 15 Jun 2020 23:48:52 +0300 (MSK)
From: Alexander Monakov <amonakov@...ras.ru>
To: Suravee Suthikulpanit <suravee.suthikulpanit@....com>
cc: linux-kernel@...r.kernel.org, Joerg Roedel <joro@...tes.org>,
iommu@...ts.linux-foundation.org
Subject: Re: [PATCH] iommu/amd: Fix event counter availability check
On Mon, 1 Jun 2020, Suravee Suthikulpanit wrote:
> Alexander
>
> On 6/1/20 4:01 PM, Alexander Monakov wrote:
> > On Mon, 1 Jun 2020, Suravee Suthikulpanit wrote:
> >
> > > > Moving init_iommu_perf_ctr just after iommu_flush_all_caches resolves
> > > > the issue. This is the earliest point in amd_iommu_init_pci where the
> > > > call succeeds on my laptop.
> > >
> > > According to your description, it should just need to be anywhere after
> > > the
> > > pci_enable_device() is called for the IOMMU device, isn't it? So, on your
> > > system, what if we just move the init_iommu_perf_ctr() here:
> >
> > No, this doesn't work, as I already said in the paragraph you are responding
> > to. See my last sentence in the quoted part.
> >
> > So the implication is init_device_table_dma together with subsequent cache
> > flush is also setting up something that is necessary for counters to be
> > writable.
> >
> > Alexander
> >
>
> Instead of blindly moving the code around to a spot that would just work,
> I am trying to understand what might be required here. In this case,
> the init_device_table_dma()should not be needed. I suspect it's the IOMMU
> invalidate all command that's also needed here.
>
> I'm also checking with the HW and BIOS team. Meanwhile, could you please give
> the following change a try:
Hello. Can you give any update please?
Alexander
> diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
> index 5b81fd16f5fa..b07458cc1b0b 100644
> --- a/drivers/iommu/amd_iommu_init.c
> +++ b/drivers/iommu/amd_iommu_init.c
> @@ -1875,6 +1875,8 @@ static int __init amd_iommu_init_pci(void)
> ret = iommu_init_pci(iommu);
> if (ret)
> break;
> + iommu_flush_all_caches(iommu);
> + init_iommu_perf_ctr(iommu);
> }
>
> /*
> --
> 2.17.1
>
> Thanks,
> Suravee
>
Powered by blists - more mailing lists